C 获取请求以获取第'页;内容

C 获取请求以获取第'页;内容,c,networking,winsock,get-request,C,Networking,Winsock,Get Request,我正在尝试执行与python相当的C语言: requests.get('http://test.com) 我首先使用getaddrinfo()将主机名(它有4个ip)解析为ip,然后使用server.sin\u addr.s\u addr=inet\u addr(ip)并成功连接(未给出错误)。但是当我试图通过发送“GET/HTTP/1.1\r\n\r\n请求来显示页面时,它基本上返回404错误(找不到页面)内容。下面是函数: void foo() { 结构addrinfo提示; struct

我正在尝试执行与python相当的C语言:
requests.get('http://test.com)

我首先使用
getaddrinfo()
将主机名(它有4个ip)解析为
ip
,然后使用
server.sin\u addr.s\u addr=inet\u addr(ip)并成功连接(未给出错误)。但是当我试图通过发送
“GET/HTTP/1.1\r\n\r\n
请求来显示页面时,它基本上返回404错误(找不到页面)内容。下面是函数:


void foo()
{
结构addrinfo提示;
struct addrinfo*result=NULL;
零内存(&提示,sizeof(提示));
hits.ai_family=AF_unsec;
hits.ai_socktype=SOCK_流;
hits.ai_protocol=IPPROTO_TCP;
字符主机[256],端口[256];
strcpy(主机,www.test.com);
strcpy(端口,“80”);
getaddrinfo(主机、端口、提示和结果);
*sockaddr_ipv4=(struct sockaddr_in*)结果->ai_地址;
字符ip[256];
strcpy(ip,inet_ntoa(sockaddr_ipv4->sin_addr));
服务器中的结构sockaddr_;
sockets=SOCKET(AF\u INET,SOCK\u STREAM,0);
char*消息,服务器_回复[2000];
内部记录大小;
server.sin_addr.s_addr=inet_addr(ip);
server.sinu family=AF\u INET;
server.sin_port=htons(80);
if(connect(s,(struct sockaddr*)&server,sizeof(server))<0
{
puts(“连接错误”);
返回1;
}
message=“GET/HTTP/1.1\r\n\r\n”;
如果(发送,消息,字符串(消息),0)<0)
{
看跌期权(“发送失败”);
返回1;
}
if((recv_size=recv(s,server_reply,2000,0))==SOCKET_ERROR)
{
看跌期权(“recv失败”);
}
服务器回复[recv_size]='\0';
puts(服务器应答)*/
系统(“暂停”);
}

结果

HTTP/1.1 404未找到日期:2017年9月15日星期五03:19:41 GMT 内容类型:text/html;字符集=UTF-8服务器:ghs内容长度: 1561 X-XSS-Protection:1;模式=块X-Frame-Options:SAMEORIGIN

错误404(未找到)!!1
{空白:0;填充:0}html,代码{字体:15px/22px arial,无衬线}html{背景 nd:#fff;颜色:#222;填充:15px}正文{边距:7%自动 0;最大宽度:390px;最小高度:180px;填充:30px 0 15px}> body{background:url(//www.google.com/images/error s/robot.png)100% 5px不重复;右填充:205px}p{margin:11px 0 22px;溢出 w:hidden}ins{color:#777;文本装饰:none}a img{border:0}@media 屏幕和(m) 最大宽度:772px){正文{背景:无;页边顶部:0;最大宽度:无;右侧填充:0 }}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo _color_150x54dp.png)无重复;左边距:-5px}@media only屏幕和(最小分辨率) 解决方案:192dpi{#logo{背景:url(//www.google.com/images/branding/googlelogo/ 2x/googlelogo\u color\u 150x54dp.png)无重复0%0%/100% 100%;-moz边框图像:ur l(//www.google.com/images/branding/googlelogo/2x/googlelogo\u color\u 150x54dp.png) 0}}@media only屏幕和 (-webkit最小设备像素比:2){#徽标{背景:ur l(//www.google.com/images/branding/googlelogo/2x/googlelogo\u color\u 150x54dp.png) 无重复;-webkit背景大小:100% 100%}}#徽标{显示:内联块;高度:54px;宽度:150px} 404.这是一个错误。请求的URL 在这台服务器上找不到
/
。这就是我们要做的 知道



我做错了什么?我必须如何处理这个问题?

在HTTP/1.1中,您需要指定一个
主机
头。在HTTP/1.0中,您不需要。因此,您必须将其更改为:

 GET / HTTP/1.0\r\n\r\n


此更改是因为虚拟主机名变得如此普遍。

请发布代码,您的帖子中没有足够的信息来知道问题出在哪里?您为什么要尝试此操作?您不能使用这样的库吗?您是对的,我应该进行更新。此外,我的项目大量基于windows和winsock。如果我不能使用这些工具,我将无法做到这一点。。然后我可以尝试其他API。这与python没有任何关系…标记有误导性。另外,请发布确切的输出。您没有回答为什么不使用libcurl之类的工具。虽然我认为在windows上使用libcurl并不容易,但肯定有其他替代方法。http客户端是一个复杂的怪物,因此如果您需要一些功能,请使用它就像你说的“HTTP/1.1”
你应该使用图书馆时声称支持的那样。@Edenia:一份美味的烤牛排配上红色的血腥中心是一顿美味的晚餐。加上一份烤土豆,它就完美了。嗯……我们会发一些不相关的句子,不是吗?
 GET / HTTP/1.0\r\n\r\n
 GET / HTTP/1.1\r\n
 Host: the.hostname.com\r\n\r\n