如何使用Python发送无'Host Header'的请求?

1 投票
1 回答
1610 浏览
提问于 2025-04-17 22:05

我已经尝试了很多天,现在终于决定问这个问题,可能对大多数专家来说是个傻问题。
我正在使用PyUnit来测试我应用程序的API。
这个应用程序(需要测试的)部署在我们这里的一台本地服务器上。这个应用程序可以防止黑客进行恶意活动。所以我通过这个应用程序访问任何被保护的网站。例如:http://my-security-app/stackoverflow/loginhttp://my-security-app/website-to-be-protected等等。

几乎整个框架都是围绕Urllib和Urllib2运行的。

场景:- 我需要用Python发送一个没有'Host'头的请求,或者用'Host123'作为头名称的请求,而不是原来的名称。

我尝试了下面提到的代码,但对我来说不起作用。

"测试失败,因为出现了一个异常:[Errno 9] 错误的文件描述符"

    host = "12.1.3.16"
    with closing(socket.create_connection((host, 80))) as s:
     # send request without Host header
        s.sendall(b"GET /mywebsite/administrator/ HTTP/1.1\r\n" +
        #"Host12:{}\r\n".format(host).encode('ascii', 'strict') +
        b"Connection: close\r\n\r\n")   

任何帮助都将不胜感激。

提前谢谢你们!

1 个回答

1

可以使用httpbin这个测试服务器来进行测试。顺便说一下,它是用Python写的。

描述:

测试一个HTTP库有时候会变得很麻烦。PostBin.org非常适合测试POST请求,但其他方面就不太好用了。这个服务器的存在就是为了覆盖各种HTTP场景。还在考虑增加更多的接口(比如说 /deflate)。

所有接口的响应都是用JSON格式编码的。

作者还提供了一个基于这个服务器的公共服务,地址是http://httpbin.org

撰写回答