获取网站来源,获取额外的符号,winsock

Get website source, getting extra symbols, winsock

本文关键字:获取 符号 winsock 网站      更新时间:2023-10-16

您好,我的套接字有些问题。我正在尝试获取网页源,我得到了我需要的一切,但在响应标题和页面源之间,我得到了一些额外的符号,所以我的问题是为什么我得到这些额外的符号。

我从某个地方得到了那个"18ad"......

来源于页面:

<..>
Server: Apache-Cloud
Transfer-Encoding: chunked
Date: Thu, 27 Sep 2012 14:46:43 GMT
Connection: close
X-Cache: M

18ad
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xh
<..>

十六进制视图:

    char: X-Cache: M......18ad...<!DO
    hex : 58 2D 43 61 63 68 65 3A 20 4D 0D 0D 0A 0D 0D 0A 31 38 61 64 0D 0D 0A 3C 21 44 4F

请求标头:

$GET / HTTP/1.1rn
Host: www.demotivation.usrn
Connection: closernrn

我的代码:

char*       ip  = "www.demotivation.us";
char*       url = "92.61.41.215";
<..>
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(ip);
sockAddr.sin_port = htons(80);
<..>
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(s, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR_IN);
<..>
// receive source to temporary buffer
do
{
    bytes = recv(s, buffer, BUFFER_SIZE, 0);
    buffer[bytes] = '';
    cout << buffer;
} while(bytes > 0);

18ad分块编码方案的一部分。这意味着内容是分几个块而不是一个下载的。18ad指示下一个块的大小(在本例中为 6317 字节)。

有关说明,请参阅分块传输编码。

请注意,recv() 可以在失败时返回 -1,在用作数组索引之前应检查这些。