【问题标题】:socket, request http webpagesocket,请求http网页
【发布时间】:2015-10-02 01:55:24
【问题描述】:

我通过发出 http 请求并读取响应标头来获取一些带有套接字的网站,如下所示:

char buffer[1000];
while ((bytesReceived = tcpSocket.Receive(buffer, 1000-1)) > 0)
{
    buffer[bytesReceived] = '\0';
    myFile << buffer;
    memset(buffer, 0, 1000);
}

这是接收函数:

int fsx::TcpSocket::Receive(char* _buffer, size_t _length)
{
    int iResult = recv(this->socketHandler, _buffer, _length, 0);
    if (iResult >= 0)
    {
        return iResult;
    }
    else
    {
        return SOCKET_ERROR;
    }
}

我得到的这部分响应:

HTTP/1.1 200 OK
Date: Tue, 22 Sep 2015 10:46:10 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Set-Cookie: __cfduid=d01e9db42c5332c444d5105c2cd9fd9e01442918769; expires=Wed, 21-Sep-16 10:46:09 GMT; path=/; domain=.stackoverflow.com; HttpOnly
Cache-Control: public, no-cache="Set-Cookie", max-age=60
Cf-Railgun: 2b57bd3274 5.38 0.314316 0030 3350
Expires: Tue, 22 Sep 2015 10:47:09 GMT
Last-Modified: Tue, 22 Sep 2015 10:46:09 GMT
Vary: *
X-Frame-Options: SAMEORIGIN
X-Request-Guid: 9921fd42-6fd5-4a34-a839-c87d26b2f39a
Set-Cookie: prov=e6796729-38a7-4754-af17-96349ae78010; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly
Server: cloudflare-nginx
CF-RAY: 229d6ca79fef05b5-ARN

3b19 //<------------- WHAT THE HECK IS THIS?
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/QAPage">
<head>

如您所见,我在响应标题的末尾得到了这个字符“3b19”,那是什么?每次都是一组不同的字符,我似乎无法在以下位置找到它们:http://www.stackoverflow.com/questions/12691882/how-to-send-and-receive-data-socket-tcp-c-c 这是我正在获取的页面。

【问题讨论】:

  • 奇怪。你可以在你的浏览器和目标服务器之间用嗅探器做类似的事情,看看它是否以同样的方式捕获了 nginx 响应?
  • 是否有任何理由使用套接字来执行 HTTP 请求而不是高级库(例如 cURL、WinHTTP、WinINet 等)?

标签: c++ sockets http


【解决方案1】:

它是“分块编码”中使用的内容发送的长度。

RFC2616 3.6.1 分块传输编码描述的是“分块编码”。

【讨论】:

  • 这解释了很多。虽然内容长度会在标题“content-length: 23232\r\n”中设置,但我相信,干杯。
猜你喜欢
  • 2017-09-22
  • 2018-11-13
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
相关资源
最近更新 更多