[英]GET request to a local IP in C with sockets
我正在尝试将C代码组合到向本地IP地址发出一个HTTP GET
请求(在我的网络中),该本地IP地址的网页在端口80上运行。该请求应返回index.html
。
该代码适用于具有DNS的真实IP的网站 (我已经用www.olx.ro
及其IP进行了测试),但是当我尝试放置本地IP(即10.74.4.10)时,我得到了400错误的请求响应。
这是代码:
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>
int main(void)
{
int byte_count;
int sockfd = 0,n = 0;
char recvBuff[9000];
struct sockaddr_in serv_addr;
memset(recvBuff, '0' ,sizeof(recvBuff));
if((sockfd = socket(AF_INET, SOCK_STREAM, 0))< 0)
{
printf("\n Error : Could not create socket \n");
return 1;
}
else printf("Created socket successfully.\n");
printf("\n");
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(80);
serv_addr.sin_addr.s_addr = inet_addr("10.74.4.10");
if(connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))<0)
{
printf("\n Error : Connect Failed \n");
return 1;
}
else printf("Connected successfully. \n ");
printf("\n \n");
char *header = "GET /index.html HTTP/1.0\r\nHost:10.74.4.10:80\r\n\r\n";
send(sockfd,header,strlen(header),0);
byte_count = recv(sockfd,recvBuff,sizeof(recvBuff),0);
printf("Received %d bytes of data in buf\n",byte_count);
printf("\n");
printf("%.*s",byte_count,recvBuff);
return 0;
}
如果我将inet_addr("10.74.4.10")
更改为inet_addr("10.74.4.10")
inet_addr("2.16.128.73")
和"GET /index.html HTTP/1.0\\r\\nHost:10.74.4.10:80\\r\\n\\r\\n"
到"GET /index.html HTTP/1.0\\r\\nHost:www.olx.ro:80\\r\\n\\r\\n"
,那么代码将按预期工作。
另外,我想提到我将Repl.it用作C编译器。
编辑:我忘了提,代码停在connect()
。 我尝试使用bind()
,仍然无法正常工作。 也许是因为我试图使用无法具有root用户访问权限的在线C编译器连接到特权端口(80)?
...但是当我尝试放置本地IP(即10.74.4.10)时,我收到了400错误的请求响应。
在发送有效的HTTP请求时,您使用Host
标头告诉服务器您要访问在服务器上配置的主机名10.74.4.10。 是否可行取决于服务器配置。 例如,如果将服务器配置为仅接受对名称example.com
请求,并考虑其他所有错误,则即使该Host: 10.74.4.10
可能是IP地址,它也仅接受Host: example.com
请求,而不接受Host: 10.74.4.10
请求。服务器。
...我忘了提,代码停在connect()
这根本没有任何意义。 如果您在第一次声称收到400 Bad Request
时首先要求成功连接到站点,这意味着它不能在connect
停止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.