如何使用IP地址形成GET HTTP请求

时间:2016-01-15 00:45:02

标签: c sockets http networking http-get

当我在C中使用下面的GET HTTP请求时,我不断得到400 Bad Request,但是当我使用字符串字符IP地址时它会起作用(例如:www.wwe.com/index.php):

GET %s HTTP/1.0\r\nHost: %s\r\nConnection: Keep-Alive\r\n\r\n

GET之后的%s被替换为这样的内容:http://54.236.192.188/index.php,主机值由hostent struct的h_name字符串值提供。

所以请求看起来像这样:

GET http://54.236.192.188/index.php HTTP/1.0
Host: ec2-54-236-192-188.compute-1.amazonaws.com
Connection: Keep-Alive

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

GET的参数应该只是资源路径本身,Host标头应该是发送请求的计算机的域/主机,由原始指定URL。

要请求http://www.wwe.com/index.phpGET请求将如下所示:

GET /index.php HTTP/1.1
Host: www.wwe.com
...

要请求http://54.236.192.188/index.phpGET请求将如下所示:

GET /index.php HTTP/1.1
Host: 54.236.192.188
...

但是,如果服务器在同一IP地址上运行多个网站,则无法在rquest中提供IP地址。 Host标题告诉服务器要访问哪个特定网站。

除非需要,否则应使用HTTP/1.1代替HTTP/1.0。例如,Keep-Alive默认情况下不支持HTTP/1.0。 HTTP 1.1需要Host标头。