请问怎样用socket进行post表单。(不是用MFC),怎么搞呢? Send 时,你要发送的数据主要是:POST http://xxx.xxx.xx/xxx.html /HTTP 1.0Content-Length: ???xx=xxx&xxx=xxx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 static char *g_pszSendLog = "POST /member/logon.asp\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Content-Length: 99\r\n" "\r\n" // 空行 "name=ttzzgg_80713&pass=xxxx&type=1\r\n";不知道是不是正确的呢。返回的是一个200 OK,不过却说我没有输入用户名和密码 form的数据,格式有多种,这个是由enctype决定的。rfc里面有详细的描述 我用wininet编程时遇到同样问题!字符串被识别是图形数据了!登陆不上去! #include <stdio.h>#include "winsock.h"#pragma comment(lib,"ws2_32.lib")#define winsock_version 0x0101void main(){ //If it works,it is written by masterz,otherwise I don't know who write it. SOCKADDR_IN saServer; LPHOSTENT lphostent; WSADATA wsadata; SOCKET hsocket; int nRet; const char* host_name="www.csdn.net"; char* req="POST /member/logon.asp HTTP/1.0\r\n" "From: local\r\n" "User-Agent: post_test/1.0\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Content-Length: 34\r\n\r\n" "name=XXXXXX&pass=XXXXXXXXX&type=1"; //if you change xxx, you may have to change content-length correspondingly if(WSAStartup(winsock_version,&wsadata)) printf("can't initial socket"); lphostent=gethostbyname(host_name); if(lphostent==NULL) printf("lphostent is null"); hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); saServer.sin_family = AF_INET; // Use def. now, need to handle general case saServer.sin_port = htons(80); saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list); nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN)); if (nRet == SOCKET_ERROR) { printf("can't connect"); closesocket(hsocket); return; } else printf("connected with %s\n",host_name); nRet = send(hsocket, req, strlen(req), 0); if (nRet == SOCKET_ERROR) { printf("send() failed"); closesocket(hsocket); } else printf("send() OK\n"); char dest[1000]; nRet=1; while(nRet>0) { nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0); if(nRet>0) dest[nRet]=0; else dest[0]=0; printf("\nReceived bytes:%d\n",nRet); printf("Result:\n%s",dest); } } 要实现个P2P下载的功能,有哪些P2P库可以用的?大家用过的帮帮忙说下~ lisunlin0请再次接分,帮忙解决了HOOK问题 ftp实现下载: 怎样实现切分窗口之间的通讯 为什么N多个人都说《windows程序设计》只看上册就可以了~? 程序编译时经常中途停止 如何设置才能默认以新的VC-IDE打开.dsw文件?谢谢! 为何我改变鼠标光标后总一闪一闪的? directx sdk 7和vc 6.0的错误问题,高分100 请大家给点建议,怎样开始VC的学习? 动态创建菜单??? 万分火急,请大家帮帮忙!
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 99\r\n"
"\r\n" // 空行
"name=ttzzgg_80713&pass=xxxx&type=1\r\n";
不知道是不是正确的呢。返回的是一个200 OK,不过却说我没有输入用户名
和密码
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
#define winsock_version 0x0101
void main()
{
//If it works,it is written by masterz,otherwise I don't know who write it.
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name="www.csdn.net";
char* req="POST /member/logon.asp HTTP/1.0\r\n"
"From: local\r\n"
"User-Agent: post_test/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 34\r\n\r\n"
"name=XXXXXX&pass=XXXXXXXXX&type=1"; //if you change xxx, you may have to change content-length correspondingly
if(WSAStartup(winsock_version,&wsadata))
printf("can't initial socket");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET;
// Use def. now, need to handle general case
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return;
}
else
printf("connected with %s\n",host_name);
nRet = send(hsocket, req, strlen(req), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket);
}
else
printf("send() OK\n");
char dest[1000];
nRet=1;
while(nRet>0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",dest);
}
}