【发布时间】:2018-12-05 17:21:32
【问题描述】:
我一直在尝试运行此代码以开始与不同站点的通信,但无法建立一个。有人可以帮我解决我在这里缺少的东西吗?
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(s)
server = 'www.python.org'
port = 80 #defining port / acting like a browser
server_ip = socket.gethostbyname(server)
print(server_ip)
request = "GET / HTTPS/1.1\nHost: "+server+"\n\n"
s.connect((server_ip,port))
s.send(request.encode())
result = s.recv(4096)
while (len(result) > 0):
print(result)
result = s.recv(1024)
每次使用不同的网站时,我都会收到此错误消息:
<socket.socket fd=508, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
151.101.152.223 b'HTTP/1.1 301 Moved Permanently\r\nServer: Varnish\r\nRetry-After: 0\r\nLocation: https://www.python.org/\r\nContent-Length: 0\r\nAccept-Ranges: bytes\r\nDate : 2018 年 12 月 5 日星期三 17:10:03 GMT\r\n通过:1.1 varnish\r\n连接:关闭\r\nX-Served-By: cache-bom18222-BOM\r\nX-Cache: HIT\r\ nX-Cache-Hits: 0\r\nX-Timer: S1544029803.224270,VS0,VE0\r\nStrict-Transport-Security: max-age=63072000;包括子域\r\n\r\n'
【问题讨论】:
-
在您的代码中,您使用 80 端口与 HTTPS 协议连接。尝试使用 443(HTTPS 的默认端口)端口连接到主机。同样对于 HTTPS 连接,您必须实现 TLS 握手或使用标准库 (docs.python.org/3/library/ssl.html) 中的 TLS/SSL 包装器。