使用WinHttp发布表单

时间:2010-12-25 11:05:08

标签: 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
    }

这应该有效吗?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

我猜

  • 你需要传递不宽的窄字符串作为发布数据。我不知道你是否为指定编码的发布数据指定了一个内容类型 - 你可能应该很容易 - 或者只是将字符串重新编码为UTF-8,或者只是组装成一个窄字符串首先
  • 你可能需要在帖子数据上有明确的行尾,即将\r\n添加到你的(窄)字符串中 - 我不知道API是否会添加一个,因为我认为你是对二进制数据进行同样的调用。

答案 2 :(得分:1)

根据此MSDN page,假设您在"POST"中使用了WinHttpOpenRequest动词,那么您的代码示例肯定会有效。如果事情不起作用,那么在网络浏览器和你的应用程序上运行Fiddler,并比较两种情况下生成的标题。