使用WinHttp发布表单

use*_*241 4 c++ winhttp

在发布到服务器之前,我是否需要添加任何标头?

例如,目前我正在尝试以这种方式发送请求以及发布数据,

  LPCWSTR post = L"name=User&subject=Hi&message=Hi";

    if (!(WinHttpSendRequest( hRequest, 
                            WINHTTP_NO_ADDITIONAL_HEADERS,
                            0, (LPVOID)post, wcslen(post), 
                            wcslen(post), 0)))
    {
          //error
    }
Run Code Online (Sandbox Code Playgroud)

这有用吗?

Oha*_*adM 5

什么对我有用:

    LPSTR  post = "log=test";//in my php file: if(isset($_POST['log']))
    hRequest = WinHttpOpenRequest(hConnect,
                                    L"POST",
                                    L"/test.php",
                                    NULL,
                                    WINHTTP_NO_REFERER,
                                    WINHTTP_DEFAULT_ACCEPT_TYPES,
                                    0);
    bResults = WinHttpSendRequest(hRequest,
                                    L"content-type:application/x-www-form-urlencoded",
                                    -1,
                                    post,
                                    strlen(post),
                                    strlen(post),
                                    NULL);
Run Code Online (Sandbox Code Playgroud)


Rup*_*Rup 3

我猜

  • 您需要传递窄字符串,而不是像发布数据那样宽。我不知道您是否为发布的数据指定了一种内容类型,该内容类型将指定编码 - 如果很容易,您可能应该这样做 - 或者只是将字符串重新编码为 UTF-8,或者只是组装为窄字符串首先
  • 您可能需要在发布数据上有一个显式的行尾,即添加\r\n到您的(窄)字符串中 - 我不知道 API 是否会添加一个,因为我假设您会对二进制数据进行相同的调用。