使用 HttpSendRequestA 发送 POST 失败并显示 ERROR_HTTP_HEADER_NOT_FOUND?
Posted
技术标签:
【中文标题】使用 HttpSendRequestA 发送 POST 失败并显示 ERROR_HTTP_HEADER_NOT_FOUND?【英文标题】:Sending a POST using HttpSendRequestA fails with ERROR_HTTP_HEADER_NOT_FOUND? 【发布时间】:2020-10-07 18:25:45 【问题描述】:我正在尝试在本地计算机上使用 XAMPP 将数据发布到测试 .php
脚本,但它总是以 ERROR_HTTP_HEADER_NOT_FOUND
失败。我检查了服务器日志,没有向 Apache 发送请求。我可以通过网络浏览器手动执行此操作,并且 php 脚本按预期运行。
这是不起作用的 C++ 代码。有人能指出问题吗?
static const char *accepttypes[]= "application/x-www-form-urlencoded", NULL;
static const char headers[]="application/x-www-form-urlencoded\r\n";
// open session
HINTERNET hsession;
if ((hsession=InternetOpen(_T("Whatever"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0)) != NULL)
HINTERNET hconnect;
if ((hconnect=InternetConnect(hsession, _T("127.0.0.1"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0)) != NULL)
HINTERNET hpostreq;
if ((hpostreq=HttpOpenRequestA(hconnect, "POST", "/mytest.php", NULL, NULL, accepttypes, INTERNET_FLAG_RELOAD, 0)) != NULL)
BYTE *data=(BYTE*)"xyz=1234";
DWORD datasize=8;
if (HttpSendRequestA(hpostreq, headers, sizeof(headers), (LPVOID) data, datasize))
....
// ^^^^^ That always fails with ERROR_HTTP_HEADER_NOT_FOUND
【问题讨论】:
【参考方案1】:我发现您对HttpSendRequestA()
的调用中有两个错误:
headers
的值需要从"application/x-www-form-urlencoded\r\n"
改为"Content-Type: application/x-www-form-urlencoded"
。
sizeof(headers)
需要更改为 -1
、sizeof(headers)-1
或 strlen(headers)
。您应该传入-1
以让函数计算headers
字符串的字符长度,或者您可以传入实际字符长度。字符串的空终止符不包含在该长度中。
【讨论】:
需要的是 sizeof()-1 (我想知道)。缺少 Content-Type 是因为当我从八位字节流更改回我已注释掉的 urlencoded 时,我在复制/粘贴时错过了它(呃)。谢谢!!以上是关于使用 HttpSendRequestA 发送 POST 失败并显示 ERROR_HTTP_HEADER_NOT_FOUND?的主要内容,如果未能解决你的问题,请参考以下文章