HttpSendRequest发送POST参数的格式是什么?

纹刀雨辰 2018-11-19 02:50:24
我用HttpSendRequest发送GET参数是没问题的,但发送POST参数,网站收不到,请问HttpSendRequest的POST参数的格式是什么?

strPostData = _T("info=abc&var=15");

HINTERNET hRequest = HttpOpenRequestW(hSession, _T("POST"), strPageUrl,
_T("HTTP/1.1"), _T(""), 0, INTERNET_FLAG_NO_AUTH |
INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_NO_CACHE_WRITE, 0);

BOOL bResult = HttpSendRequestW(hRequest, sHtmlHeader.GetBuffer(),
sHtmlHeader.GetLength(), strPostData.GetBuffer(), strPostData.GetLength());
...全文
1198 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-11-19
  • 打赏
  • 举报
回复
推荐一个叫 httpanalyzerstdv7 的软件,本地抓http包,一看就很清晰了
纹刀雨辰 2018-11-19
  • 打赏
  • 举报
回复
引用 1 楼 jha334201553 的回复:
比如请求http://img4.imgtn.bdimg.com/it/u=3836676079,1858751875&fm=26&gp=0.jpg ,会post传送 data=download, 则下面代码

HINTERNET hSession = InternetOpenW(L"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnectW(hSession, L"img4.imgtn.bdimg.com", (INTERNET_PORT)80 /*443*/, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
HINTERNET hRequest = HttpOpenRequestW(hConnect, L"Post", L"it/u=3836676079,1858751875&fm=26&gp=0.jpg", NULL, NULL, NULL, 0 /*INTERNET_FLAG_SECURE*/, 0);
HttpSendRequest(hRequest, NULL, NULL, (LPVOID)"data=download", strlen("data=download"));

找到问题了,发送的好像必须是窄字符串,具体再研究一下,谢谢!
(LPVOID)"data=download", strlen("data=download")
zgl7903 2018-11-19
  • 打赏
  • 举报
回复
zgl7903 2018-11-19
  • 打赏
  • 举报
回复
使用HTTP传输

{
// TODO: Add your control notification handler code here
CStringA strHtml;
HttpTranslate(CHttpConnection::HTTP_VERB_POST,
_T("http://www.autumn-ink.com/BackupBoy/test.jsp"), _T("info=abc&var=15"), strHtml);

if(!strHtml.IsEmpty())
{
TRACE(_T("%s\n"), strHtml);
try
{
LPCTSTR szFile = _T("e:\\temp\\t.html");
CFile f(szFile, CFile::modeCreate|CFile::modeWrite);
f.Write((LPCSTR)strHtml, strHtml.GetLength());
f.Close();

ShellExecute(NULL, NULL, szFile, NULL, NULL, SW_SHOWNORMAL);
}
catch(CFileException *e)
{
e->ReportError();
e->Delete();
}
}


}
纹刀雨辰 2018-11-19
  • 打赏
  • 举报
回复
引用 1 楼 jha334201553 的回复:
比如请求http://img4.imgtn.bdimg.com/it/u=3836676079,1858751875&fm=26&gp=0.jpg ,会post传送 data=download, 则下面代码

HINTERNET hSession = InternetOpenW(L"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnectW(hSession, L"img4.imgtn.bdimg.com", (INTERNET_PORT)80 /*443*/, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
HINTERNET hRequest = HttpOpenRequestW(hConnect, L"Post", L"it/u=3836676079,1858751875&fm=26&gp=0.jpg", NULL, NULL, NULL, 0 /*INTERNET_FLAG_SECURE*/, 0);
HttpSendRequest(hRequest, NULL, NULL, (LPVOID)"data=download", strlen("data=download"));

没有用啊,我现在测试的地址是http://www.autumn-ink.com/BackupBoy/Registry.jsp
post传送info=abc&var=15
页面返回数据info=null var=null
用浏览器访问http://www.autumn-ink.com/BackupBoy/test.jsp页面post提交数据返回是正确的,说明不是网站问题
「已注销」 2018-11-19
  • 打赏
  • 举报
回复
比如请求http://img4.imgtn.bdimg.com/it/u=3836676079,1858751875&fm=26&gp=0.jpg ,会post传送 data=download, 则下面代码

HINTERNET hSession = InternetOpenW(L"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnectW(hSession, L"img4.imgtn.bdimg.com", (INTERNET_PORT)80 /*443*/, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
HINTERNET hRequest = HttpOpenRequestW(hConnect, L"Post", L"it/u=3836676079,1858751875&fm=26&gp=0.jpg", NULL, NULL, NULL, 0 /*INTERNET_FLAG_SECURE*/, 0);
HttpSendRequest(hRequest, NULL, NULL, (LPVOID)"data=download", strlen("data=download"));

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧