用c++编写的HTTP POST请求
HTTP POST request with C++
在你把这篇文章标记为重复之前:我已经尝试了所有的"解决方案",我可以在互联网和stackoverflow上找到,但没有任何工作,主要是因为一些函数被弃用,或者我缺少一些库或其他东西。
我得到了下面的代码在这里(第二个答案,因为我不能得到libcurl工作),但这对我不起作用,因为Visual Studio 2015告诉我使用GetAddrInfoW()
而不是gethostbyname()
,因为它已被弃用,所以我试图这样做,最终像这样:
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
return;
}
SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct hostent* host = new hostent();
GetAddrInfoW((PCWSTR)"www.google.com", (PCWSTR)"http", nullptr, (PADDRINFOW*)host);
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(80);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)"192.168.xxx.xxx");
if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0)
{
return;
}
send(Socket, "GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn", strlen("GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn"), 0);
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0)
{
int i = 0;
while (buffer[i] >= 32 || buffer[i] == 'n' || buffer[i] == 'r')
{
i += 1;
}
}
closesocket(Socket);
WSACleanup();
因为空指针
也不能工作(Visual Studio说:异常触发在0x00AE5F02在Project1.exe: 0xC0000005:访问违规读取在位置0x00000000[…])
这对我来说是完全合乎逻辑的,但我不知道如何正确地做,所以如果有人知道,请告诉我怎么做,因为我现在有点沮丧
一个明显的错误是内部while循环是无限的。您需要使用i
和nDataLength
变量限制它。
相关文章:
- 如何使用boost/beast从HTTP POST请求中解析和提取有效负载?
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- HTTP POST 请求不允许我定义上下文类型
- cpp libcurl 在 HTTP post 调用中发送 zip 文件,而不使用 multipart\form-da
- 使用 http post 在 FCM 中推送通知
- 带有边界获取错误的 HTTP POST
- HTTP post 使用 libcurl 创建 InfluxDB 数据库
- C HTTP POST 400不良请求
- 处理HTTP POST请求/响应
- 使用 cpprest 通过 json 对象在 http post 中发送图像
- 如何使用libmicrohttpd/microhttpd创建HTTP POST请求
- 使用libCURL的简单HTTP Post
- 为什么在c++中使用http post失败
- 将 JSON 对象返回到 HTTP POST REST 调用C++
- 如何向包含多部分 HTTP POST 的 SendGrid Web API 发出请求
- HTTP POST 请求使用 boost::asio
- mosyn Http post to php using AMDownload
- 将 http "Post" 请求发送到 C 或 C++ 中的 php 代码
- gSOAP - 修改 HTTP POST 标头
- 发送http post消息错误报告的安全方式