如何在C ++中使用Wininet创建POST请求

问题描述 投票:0回答:1

我的C ++代码的目标是将HTTP POST内容发送到PHP页面,该页面会将内容写入文件。这是PHP代码:

<?php
        $fh = fopen("message.user", 'w') or die("can't open file");
        fwrite($fh, "User said : " . htmlspecialchars($_POST["message"]));
        fclose($fh);
?>

我用邮递员的请求测试了我的PHP代码,它的工作原理是:Postman request

问题是,当我使用C ++客户端发送POST消息时,该消息未保存,因此这意味着POST请求格式错误。这是代码:

void sendHello()
{
    LPCSTR header = "Content-Type: application/x-www-form-urlencoded";
    char lpb[1000] = "message=Hello I am here !";
    LPVOID myMessage = (LPVOID)lpb;
    HINTERNET hInternet = InternetOpenA("InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    HINTERNET hConnection = InternetConnectA(hInternet, "127.0.0.1", 80, " ", " ", INTERNET_SERVICE_HTTP, 0, 1);
    HINTERNET hRequest  = HttpOpenRequestA(hConnection, "POST", "/message.php", NULL, NULL, NULL, 0, 1);
    HttpSendRequestA(hRequest, header, strlen(header), myMessage, sizeof(myMessage));
}
c++ post wininet
1个回答
1
投票

sizeof(myMessage)只是指针的大小。这不是您留言的大小。除非您really确定自己​​在做什么,否则不要使用sizeof

由于您使用的是C ++,请摆脱那些令人毛骨悚然的char数组,而改为使自己成为一个不错的std::string。然后,很容易找出数据有多长时间。

或者,strlen可以在不做进一步修改的情况下为您提供帮助。

此外,您不会对任何WinInet函数的结果进行任何错误检查。那太糟糕了。

© www.soinside.com 2019 - 2024. All rights reserved.