我的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));
}
sizeof(myMessage)
只是指针的大小。这不是您留言的大小。除非您really确定自己在做什么,否则不要使用sizeof
。
由于您使用的是C ++,请摆脱那些令人毛骨悚然的char
数组,而改为使自己成为一个不错的std::string
。然后,很容易找出数据有多长时间。
或者,strlen
可以在不做进一步修改的情况下为您提供帮助。
此外,您不会对任何WinInet函数的结果进行任何错误检查。那太糟糕了。