Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何接收HTTP响应_C_Sockets_Http_Networking - Fatal编程技术网

C 如何接收HTTP响应

C 如何接收HTTP响应,c,sockets,http,networking,C,Sockets,Http,Networking,结果: 我正在使用套接字编写HTTP客户端。这里的问题是read()func only返回HTTP响应体。但我希望它也能获取http响应头。我不知道我做错了什么。问题是您没有在GET请求中指定HTTP版本,因此服务器会认为您是1.0之前的客户端,不会向您发送任何头 改为这样做: char url[]= "GET " PATH "\r\n" "Host: " HOST "\r\n" "User-Agent: Mozilla/5.0\r\n" "\r\n"; write(sfd, url,

结果:


我正在使用套接字编写HTTP客户端。这里的问题是read()func only返回HTTP响应体。但我希望它也能获取http响应头。我不知道我做错了什么。

问题是您没有在
GET
请求中指定HTTP版本,因此服务器会认为您是1.0之前的客户端,不会向您发送任何头

改为这样做:

char url[]= "GET " PATH "\r\n"
"Host: " HOST "\r\n"
"User-Agent: Mozilla/5.0\r\n"
"\r\n";    
write(sfd, url, strlen(url)); // write(fd, char[]*, len);  
bzero(buffer, BUFFER_SIZE);
while(read(sfd, buffer, 1024 - 1) != 0){
    printf("%s", BUFFER_SIZE);
    bzero(buffer, 1024);
}
或:


然后服务器会给你标题。

问题是你没有在
GET
请求中指定HTTP版本,因此服务器会认为你是1.0之前的客户端,不会向你发送任何标题

改为这样做:

char url[]= "GET " PATH "\r\n"
"Host: " HOST "\r\n"
"User-Agent: Mozilla/5.0\r\n"
"\r\n";    
write(sfd, url, strlen(url)); // write(fd, char[]*, len);  
bzero(buffer, BUFFER_SIZE);
while(read(sfd, buffer, 1024 - 1) != 0){
    printf("%s", BUFFER_SIZE);
    bzero(buffer, 1024);
}
或:


然后服务器会给你标题。

什么是
buffer
buffer\u SIZE
?使用
buffer\u SIZE
作为缓冲区的名称非常混乱,所以你不应该这样做。
写(sfd,header,strlen(url))
?如果
header
包含的数据比
url
多怎么办?或者如果它更短呢?我编辑了代码,对不起,每个人都知道什么是
buffer
buffer\u SIZE
?使用
buffer\u SIZE
作为缓冲区的名称非常混乱,所以你不应该这样做。
编写(sfd,header,strlen(url))
?如果
header
包含的数据比
url
多怎么办?如果短一点怎么办?我编辑了代码,对不起大家
char url[]= "GET " PATH " HTTP/1.1\r\n" ...