
[英]webbrowser.open('www.google.com') simply returns true and doesn't do anything else
[英]www.google.com returns HTTP 301
我正在查看仅使用内置socket
模块在 Python 中发出简单 HTTP 请求的示例:
import socket
target_host = "www.google.com"
target_port = 80
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
client.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")
response = client.recv(4096)
client.close()
print(response)
当我运行这段代码时,我得到一个301
:
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
我对此感到困惑,因为“新位置”看起来与我要求的 URL 相同。 在同一个 URL ( www.google.com
)上使用curl
或wget
返回200
。 我很难理解有什么不同。 curl
/ wget
是否在“幕后”获得相同的301
并且只是自动请求“新”资源? 如果是这样,鉴于如上所述,“新”位置与原来的位置相同,这怎么可能?
我对此感到困惑,因为“新位置”看起来与我要求的 URL 相同
它没有。 您的主机 header 说您正在访问google.com
,即没有www
:
client.send(b"GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")
这被重定向到www.google.com
,即www
:
<A HREF="http://www.google.com/">here</A>.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.