gpt4 book ai didi

C - 如何向网站发送正确的 HEAD 请求?

转载 作者:行者123 更新时间:2023-11-30 15:06:08 33 4
gpt4 key购买 nike

我正在尝试向网站的根文档发送 HEAD 请求。这是我的代码:

main(int argc, char *argv[])
{
int csd;
struct sockaddr_in server;
struct hostent *server_host;
int server_len;
int string_size;
short server_port;
char req_buffer[BUF_LEN];
char temp_buffer[BUF_LEN];
char receiveBuffer[BUF_LEN];
char resource_buffer[BUF_LEN];
int t;

if(argc!=2)
{
fprintf(stderr,"Usage: %s website \n",argv[0]);
exit(EXIT_FAILURE);
}

server_host=gethostbyname(argv[1]); //resolve hostname
if (server_host == NULL)
{
herror("While calling gethostbyname()");
exit(EXIT_FAILURE);
}

csd=socket(PF_INET, SOCK_STREAM, 0); //create socket
if(csd<0)
{
perror("While calling socket()");
exit(EXIT_FAILURE);
}

server.sin_family=AF_INET;
memcpy(&server.sin_addr, server_host->h_addr_list[0], server_host->h_length);
server.sin_port = htons(80);
server_len=sizeof(server);
t = connect(csd, (struct sockaddr *) &server, server_len);
if (t<0)
{
perror("while connecting()");
exit(EXIT_FAILURE);
}
else
{
printf("connected to server\n\n");
}

printf("input resource, with format'/(resource name)'\n"); //request for resource (for example /index.html)
scanf("%s", temp_buffer);
printf("retreiving HEAD...\n\n");

sprintf(temp_buffer, "HEAD %s HTTP/1.0\r\n", resource_buffer);
strcpy(req_buffer, temp_buffer);
sprintf(temp_buffer, "HOST: %s\r\n", server_host);
strcat(req_buffer, temp_buffer);

sprintf(temp_buffer, "\r\n");
strcat(req_buffer, temp_buffer);

write(csd, req_buffer, strlen(req_buffer));

read(csd, receiveBuffer, BUF_LEN);

printf(receiveBuffer);
}

到目前为止,我还没有成功,我只收到了不好的请求。我使用网站进行了测试:man7.org/linux/man-pages/index.html 和 man7.org/mtk/index.html

最佳答案

首先,您使用的是 HTTP 1.0 上不存在的 host header ,您需要使用 1.1。还要添加 connection: close 以确保不使用 keepalive。

主要问题很可能是您在主机 header 中使用了 server_host。它不是一个字符串,而是一个结构体,因此它将在您的请求中输出垃圾。

简单的调试 session 或仅输出您发出的请求将显示此错误。

关于C - 如何向网站发送正确的 HEAD 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403620/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com