当我运行此代码时:
import http.client
hR = ["/index.html"]
conn = http.client.HTTPConnection("www.python.org", 80)
conn.connect()
conn.request("GET", hR)
response = conn.getresponse()
data = response.read()
print (data)
conn.close()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "C:\Python32\files\fcon.py", line 5, in <module>
conn.request("GET", hR)
File "C:\Python32\lib\http\client.py", line 964, in request
self._send_request(method, url, body, headers)
File "C:\Python32\lib\http\client.py", line 992, in _send_request
self.putrequest(method, url, **skips)
File "C:\Python32\lib\http\client.py", line 877, in putrequest
if url.startswith('http'):
AttributeError: 'list' object has no attribute 'startswith'
Run Code Online (Sandbox Code Playgroud)
此外,当我将第 3 行中的 URL 更改为“ http://python.org ”时,我收到了一个不同的错误:
Traceback (most recent call last):
File "C:\Python32\files\fcon.py", line 4, in <module>
conn.connect()
File "C:\Python32\lib\http\client.py", line 721, in connect
self.timeout, self.source_address)
File "C:\Python32\lib\socket.py", line 380, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 11001] getaddrinfo failed
Run Code Online (Sandbox Code Playgroud)
第一条错误消息告诉你它hR不应该是一个列表,而是一个字符串,这会起作用:
import http.client
hR = "/index.html"
conn = http.client.HTTPConnection("www.python.org", 80)
conn.connect()
conn.request("GET", hR)
response = conn.getresponse()
data = response.read()
print (data)
conn.close()
Run Code Online (Sandbox Code Playgroud)
然而,你将不会看到任何数据,因为python.org只能用HTTP回复301respons重定向到它的HTTPS页面,这http.client确实不自动跟随。
你得到的第二个错误http://www.python.org是因为不是有效的主机名,www.python.org这里是正确的。
http.client是一个相当低级的 API,你应该考虑urllib.request改用,甚至更好的requests库。
| 归档时间: |
|
| 查看次数: |
12146 次 |
| 最近记录: |