使用 HttpSendRequestA 发送 POST 失败并显示 ERROR_HTTP_HEADER_NOT_FOUND?

Sending a POST using HttpSendRequestA fails with ERROR_HTTP_HEADER_NOT_FOUND?

我正在尝试在本地计算机上使用 XAMPP post 数据到测试 .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

我看到你对 HttpSendRequestA() 的调用有两个错误:

  • headers的值需要从"application/x-www-form-urlencoded\r\n"改为"Content-Type: application/x-www-form-urlencoded"

  • sizeof(headers) 需要更改为 -1sizeof(headers)-1strlen(headers)。您需要传入 -1 让函数计算 headers 字符串的字符长度,或者您可以传入实际字符长度。该字符串的空终止符不包含在该长度中。