c - 尝试发送 HTTP POST 请求时,recv() 总是返回 0
问题描述
我正在尝试使用 HTTP 发布请求从谷歌地理定位 API 获取位置信息,但是在我发送查询后连接出现问题,我得到 0 作为 recev() 的返回值
发送帖子请求的方式是问题吗?
为什么我发送请求后连接关闭?我应该怎么做才能保持连接活跃?
#include <windows.h>
#include <winsock.h>
#include <string.h>
#pragma comment(lib, "Ws2_32.lib")
char content[1500];
#define constGLReq \
"POST /geolocation/v1/geolocate?key=AIzaSyBibyFS6jV3OgPxIZkFp_t97G_THjrq0Z4; sensor=false HTTP/1.1\r\n" \
"Host: www.googleapis.com\r\n" \
"Connection: close\r\n" \
"Cache-Control: no-cache\r\n" \
"Connection: keep-alive\r\n" \
"Content-Type: application/json\r\n" \
"Content-Length: 0\r\n" \
"\r\n"
int main()
{
char data[512];
SOCKET Socket;
int Res ;
WSADATA wsaData;
char * host = "www.googleapis.com";
struct hostent *server;
SOCKADDR_IN Socaddr;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
return -1;
}
memset(data, 0, sizeof(data));
memset(content, 0, sizeof(content));
Socket = socket(AF_INET, SOCK_STREAM, 0);
if (Socket == INVALID_SOCKET)
{
/* Problem in socket creation*/
}
server = gethostbyname(host);
memset(&Socaddr, 0, sizeof(SockAddr));
Socaddr.sin_port = htons(443);
Socaddr.sin_family = AF_INET;
memcpy(&Socaddr.sin_addr.s_addr, server->h_addr, server->h_length);
Res = connect(Socket, (SOCKADDR*)(&Socaddr), sizeof(Socaddr));
if (Res != 0)
{
closesocket(Socket1);
}
else
{
Res = send(Socket, constGLReq, (int)strlen(constGLReq), 0);
if (Res == SOCKET_ERROR)/* Checking for sending failed */
{
closesocket(Socket1);
}
else if (Res <= 0)
{
}
else /* Sending successfull */`enter code here`
{
do
{
Res = recv(Socket, data, sizeof(data), 0);
error = WSAGetLastError();
if (strlen(data) != 0)
{
if (strlen(content) == 0)
{
strcpy(content, data);
}
else
{
strcat(content, data);
}
}
memset(data, 0, sizeof(data));
} while (Res > 0);
}
}
closesocket(Socket1);
WSACleanup();
return 0;
}
解决方案
推荐阅读
- typescript - 联合中不存在 Typescript 属性
- javascript - p5 js 输入在移动设备上不起作用
- matlab - 如何在MATLAB中找到字符实体
- java - Spark Streaming 在应用程序 UI 上不显示任何记录
- xcode - 是否有使用 IDEA 的 VLOOKUP 功能?
- json - 如何完全按照 Wireshark 将其显示为 JSON 的方式保存数据包列表?
- highcharts - Highchart 热图分组类别插件样式问题
- python - Python数据框 - 比较两个数据框之间的行
- css - 如何评估 CSS 网格中大网格区域之外的一行的最大内容和最小内容?
- vba - Access VB 不导入所有 Excel 列