我一直在尝试使用套接字编程来实现持久化 HTTP。建立连接后,我开始按顺序请求每个对象。但是一旦我获得了第一个对象,我就开始收到第二个对象的奇怪 HTTP 响应(在 header 中)
sprintf(temp_buffer, "HEAD %s HTTP/1.1\r\n", objURL);
strcpy(req_buffer, temp_buffer);
sprintf(temp_buffer, "HOST: %s\r\n", host);
strcat(req_buffer, temp_buffer);
sprintf(temp_buffer, "\r\n");
strcat(req_buffer, temp_buffer);
if (send(sockId, req_buffer, strlen(req_buffer), 0) < 0)
{
printf("send failed\n");
return false;
}
char receiveBuffer[len];
int isRecvd = recv(sockId, receiveBuffer, sizeof(receiveBuffer), 0);
if (isRecvd < 0 )
{
cout << "Cant recieve !!" << endl;
return false;
}
//Now to extract info from the Response
cout << isRecvd<<"\n";
receiveBuffer[isRecvd] = '\0';
string response = receiveBuffer ;
cout<<"the response is "<<endl;
cout << response <<endl;
响应的 cout 语句给出如下内容: 响应是������vѴ��3��p。
最佳答案
也许您没有展示完整的代码,但您是否有可能没有完整阅读第一个响应?服务器将为您提供内容长度或分块响应,您需要确定在响应完成之前要读取多少内容。如果您确实正在读取固定数量的字节 len
,那么您认为您的第二个响应可能只是第一个的更多内容。希望对您有所帮助。
关于c++ - 使用套接字编程的奇怪 HTTP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54952276/