如何在 C++ 中使用 wininet 创建 POST 请求
Posted
技术标签:
【中文标题】如何在 C++ 中使用 wininet 创建 POST 请求【英文标题】:How to create a POST request with wininet in C++ 【发布时间】:2019-12-30 20:54:17 【问题描述】:我的 C++ 代码的目标是将 HTTP POST 内容发送到 php 页面,该页面会将内容写入文件。 我使用 Postman 请求测试了我的 PHP 代码,它可以工作。
问题是当我使用 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));
答案:
void sendHello()
LPCSTR header = "Content-Type: application/x-www-form-urlencoded";
std::string dataStr = "message=The content of the message !";
LPVOID myMessage = (LPVOID)dataStr.c_str();
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, myMessage.size());
【问题讨论】:
实际上很奇怪,sizeof(myMessage) 的输出是4。 您的“答案”应该作为真正的答案发布,而不是作为对您问题的编辑。 You can answer your own questions 【参考方案1】:sizeof(myMessage)
只是指针的大小。这不是您的消息的大小。不要使用sizeof
,除非您真的确定自己在做什么。
既然您使用的是 C++,请摆脱那些可怕的 char
数组,而让自己成为一个不错的 std::string
。然后很容易找出数据的长度。
或者,strlen
可以在这里为您提供帮助,无需进一步修改。您已经将它用于header
。
此外,您没有对任何这些 WinInet 函数的结果进行任何错误检查。这很糟糕。
【讨论】:
以上是关于如何在 C++ 中使用 wininet 创建 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
C++ wininet,连接weblogin,如何设置cookies?