使用 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) 需要更改为 -1sizeof(headers)-1strlen(headers)。您应该传入-1 以让函数计算headers 字符串的字符长度,或者您可以传入实际字符长度。字符串的空终止符不包含在该长度中。

【讨论】:

需要的是 sizeof()-1 (我想知道)。缺少 Content-Type 是因为当我从八位字节流更改回我已注释掉的 urlencoded 时,我在复制/粘贴时错过了它(呃)。谢谢!!

以上是关于使用 HttpSendRequestA 发送 POST 失败并显示 ERROR_HTTP_HEADER_NOT_FOUND?的主要内容,如果未能解决你的问题,请参考以下文章

hacker之眼Nmap的原理及用法罕有人用的IP协议Ping(-PO)

使用MailMessage发送邮件

如何使用变音符号发送 Twitter 状态更新?

SpringSpringBoot集成邮箱发送

E. 使用phpmaill发送邮件的例子

使用 jQuery 提交表单并使用 PHP 发送.. 不知道为啥它不发送