HttpSendRequest 未正确发布

Posted

技术标签:

【中文标题】HttpSendRequest 未正确发布【英文标题】:HttpSendRequest not posting correct 【发布时间】:2014-08-01 13:39:39 【问题描述】:

我正在使用 WinInet 向 apache Web 服务器发出一个简单的 POST 请求。我使用 base 64 对数据进行编码。问题是,每个 + 字符都会被空格字符替换。

为什么会这样,我怎样才能发出正确的 POST 请求。

hInternet = InternetOpen(NULL, INTERNETOPENTYPEPRECONFIG, NULL, NULL, 0);
if (hInternet)

    hConnect = InternetConnect(hInternet, szDomain, INTERNETDEFAULTHTTPPORT, NULL, NULL, INTERNETSERVICEHTTP, 0, dwTmp);
    if (hConnect)
    
        hRequest = HttpOpenRequest(hConnect, szPost, szExfiltrationURL, NULL, NULL,(char *)accept, INTERNETFLAGNOCACHEWRITE | INTERNETFLAGNOCOOKIES | INTERNETFLAGNOUI | INTERNETFLAGRELOAD, 0);
        if (hRequest)
        
            HttpSendRequest(hRequest, headers, lstrlen(headers), buffer, buflen);
            InternetCloseHandle(hRequest);
        

        InternetCloseHandle(hConnect);
    

    InternetCloseHandle(hInternet);

【问题讨论】:

你为什么首先将数据编码为base64? POST 正文可以包含未编码的二进制数据。在POST 请求中,您的数据应该在正文中,而不是在 URL 中。 【参考方案1】:

从 W3 开始

"在查询字符串中,加号保留为简写形式 空格符号:

来源:“http://www.w3.org/Addressing/URL/4_URI_Recommentations.html

【讨论】:

您可以使用百分比编码。 w3schools.com/tags/ref_urlencode.asp 所以 '+' 变成 %2B。

以上是关于HttpSendRequest 未正确发布的主要内容,如果未能解决你的问题,请参考以下文章

WinINet:如何防止 HttpSendRequest 跟随重定向(30x 状态代码)?

使用httpSendRequest c ++上传文件

当两个以上的下载已经在进行时 HttpSendRequest 阻塞

HttpSendRequest 失败并出现错误 12152,但 InternetOpenUrl 没有

HttpAddRequestHeaders 添加的 headers 和 HttpSendRequest 发送的 headers 有啥区别

在 HttpSendRequest 之后获取身份验证令牌