我的代码: -
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("www.python.org" , 80))
s.sendall(b"GET https://www.python.org HTTP/1.0\n\n")
print(s.recv(4096))
s.close()
为什么输出会显示我: -
b'HTTP / 1.1 500未找到域\ r \ n服务器:Varnish \ r \ nRetry-After:0 \ r \ ncontent-type:text / html \ r \ nCache-Control:private,no-cache \ r \ n \ nconnection:keep-alive \ r \ nContent-Length:179 \ r \ nAccept-Ranges:bytes \ r \ n日期:星期二,2017年7月11日15:23:55 GMT \ r \ nVia:1.1 varnish \ r \ n \ nConnection:关闭\ r \ n \ r \ n \ n \ n \ n最大错误:未知域\ n \ n \ n最大错误:未知域:。请检查此域名是否已添加到服务中。'
我该如何解决?
答案 0 :(得分:4)
这在多个级别上都是错误的:
那只是请求。正确处理响应是一个不同的主题。
我真的建议使用像请求这样的现有库。 HTTP(S)要复杂得多,因为大多数人认为只看一些流量捕获。
答案 1 :(得分:1)
import requests
x = requests.get('https://www.python.org')
print x.text
使用请求库,HTTPS请求非常简单!如果您使用原始套接字执行此操作,则必须执行更多工作来协商密码等。尝试上面的代码(python 2.7)。
我还要注意,根据我的经验,Python非常适合快速做事。如果您正在学习网络和加密,请尝试使用套接字自己编写HTTPS客户端。如果要快速自动化某些内容,请使用可用的工具。我几乎总是使用这种任务的请求。另外请注意,如果您对解析HTML内容感兴趣,请查看PyQuery库。我已经用它来自动化与许多Web服务的交互。