能力值:
( LV3,RANK:30 )
|
-
-
2 楼
没遇到过这种问题,HttpSendRequest是可以正常实现GET和POST的,帖完整代码来看看
|
能力值:
( LV9,RANK:370 )
|
-
-
3 楼
void main()
{
//登录PEDIY
/*LPCTSTR*/TCHAR lpreferer[] = "http://bbs.pediy.com/"; //参考
TCHAR host[] = "bbs.pediy.com"; //要访问的主机
LPCTSTR objectname = "login.php?do=login";//NULL; //要访问的资源,访问默认页面时可使用空串
LPCTSTR addtionheaders = "vb_login_username=Test&cookieuser=1&vb_login_password=&s=&do=login&vb_login_md5password=12341234&vb_login_md5password_utf=12341234"; //附加头
//登录XIAONEI
/*
/*LPCTSTR*/TCHAR lpreferer[] = "http://www.xiaonei.com/SysHome.do
"; //参考
TCHAR host[] = "login.xiaonei.com"; //要访问的主机
LPCTSTR objectname = "/Login.do";//NULL; //要访问的资源,访问默认页面时可使用空串
LPCTSTR addtionheaders = "email=1234567&password=7654321&origURL=http%3A%2F%2Fwww.xiaonei.com%2FSysHome.do&submit=%E7%99%BB%E5%BD%95"; //附加头
*/
TCHAR version[] = "HTTP/1.1"; //协议版本
TCHAR verb[] = "POST";//"GET"; //动作
LPCTSTR *accepttypes = NULL;
LPCTSTR headers ="\r\n\r\n";// NULL; //头,以"\r\n\r\n"结尾
LPVOID lpvBuffer = NULL; //用于存储返回数据的内存
ConnectTo(host);//连接到服务器
//建立请求
accepttypes = (LPCTSTR *)GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof (DWORD)*2); //数组里有两个指针
*accepttypes = (LPCTSTR)GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, 32);//字符串1
strcpy ((char *)(*accepttypes), "text/*");
hRequest = HttpOpenRequest(hConnection, verb, objectname, version, lpreferer, accepttypes, INTERNET_FLAG_KEEP_CONNECTION, 0);
if (NULL == hRequest)
{
ErrorExit("HttpOpenRequest");
}
//添加请求
if (!HttpAddRequestHeaders(hRequest, headers, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE))
{
ErrorExit("HttpAddRequestHeaders");
}
//发送请求
if (!HttpSendRequest(hRequest, headers, strlen(headers), (LPVOID)addtionheaders, strlen(addtionheaders)))
{
ErrorExit("HttpSendRequest");
}
#ifdef _DEBUGGING
//查询请求的报头
cout<<"==请求=="<<endl;
QueryHeader(HTTP_QUERY_FLAG_REQUEST_HEADERS | HTTP_QUERY_RAW_HEADERS_CRLF);
//查询服务器返回的报头
cout<<"==返回=="<<endl;
QueryHeader(HTTP_QUERY_RAW_HEADERS_CRLF);
#endif
ReadResourses(lpvBuffer);
printf("%s", lpvBuffer);
GlobalFree(lpvBuffer); lpvBuffer = NULL;
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnection);
InternetCloseHandle(hSession);
}
发现登录看雪论坛可以,登录校内就不行了。用IE访问看雪这里请求头和登录信息是在一个包里的,访问IE请求头和登录信息是在两个包里,而且两个包是连续发出去的,不是等服务器有回应了才发第二个包的。而这个程序发出去的包是第一种情况的,所以到校内那边就用不了了~
这个问题怎么解决?是有一些设置我没打开,还是要用别的方法?
里面帐号密码部分由于众所周知的原因被我马赛克掉了,你可以换自己的帐号密码试
|
能力值:
( LV9,RANK:370 )
|
-
-
4 楼
我妄图通过HOOK send函数手动把那个包给拆成两个,结果却是是拆成两个了,但是那它紧接着又补了一个包,所以服务器仍然不让我登录上去……
救命啊……
|
能力值:
( LV9,RANK:370 )
|
-
-
5 楼
自己用send全部重写了……貌似没想象中的麻烦……
|
|
|