我很困惑,因为我的GET请求代码正在运行,但它给了我一些额外的数据。
recv函数获得了一些罕见的字节。
以下是代码:
send(Socket, request, strlen(request), 0);
char *ptr = (char*)calloc(sizeof(char), RECV_LENGTH);
char *ptr2 = NULL;
size_t len_resp_total = 0;
int nDataLength;
int i = 0;
while ((nDataLength = recv(Socket, ptr, RECV_LENGTH, 0)) > 0){
printf("\n%s\n", ptr);
if (i > 0){ //prepare in case that the response is bigger than RECV_LENGTH bytes
len_resp_total += nDataLength;
printf("%p apunta a %d len total: %d e i vale: %d\n", ptr2, *ptr2, len_resp_total, i);
system("pause");
ptr2 = (char*)realloc(ptr2, len_resp_total+1);
if (ptr2==NULL){
printf("Some error reallocating memory\n");
return ERROR;
}
else{
memcpy(ptr2 + len_resp_total - nDataLength, ptr, nDataLength);
ptr2[len_resp_total] = '\0';
i++;
}
}
else{
len_resp_total += nDataLength;
ptr2 = (char*)realloc(ptr2, len_resp_total);
memcpy(ptr2, ptr, nDataLength);
ptr2[len_resp_total] = '\0';
i++;
}
}
我正在向此网站发送GET请求:http://pastebin.com/raw.php?i=8Lq1aKGn
在这里,我粘贴了我得到的回复:http://pastebin.com/RuhxKtXi。如你所见,第14,50和69行有一个奇怪的值。
那是什么?答案 0 :(得分:4)
在pastebin中查看" Transfer-Encoding:chunked",这意味着内容以chucks传输。行14 50和69上的比特是每个块长度的十六进制值。每个块都是该长度,加上2个字符(\ r \ n)。每个大小都以十六进制表示,后跟\ r \ n。
这意味着有1e0d字节,然后是ed5字节,然后是0字节。
1e0d\r\n
[1e0d bytes of content here]\r\n
ed5\r\n
[ed5 bytes of content here]\r\n
0\r\n
[no content here]\r\n