我是套接字编程的新手,我基本上使用套接字库编写了一些代码,这些代码应该打印元数据和我想要的网站的网站内容--在我的例子中是Facebook,http端口80。
我的程式码如下所示:
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('facebook.com',80))
GET = 'GET http://www.facebook.com HTTP/1.0\r\n\r\n'.encode()
s.send(GET)
while True:
data = s.recv(512)
if len(data) < 1:
break
print(data.decode())
s.close()
问题是,当我运行程序时,我得到'HTTP/1.1 502 Error with server connection'在顶部的其他输出元数据看起来像这样:
Proxy-Status: server_connection_error; e_isproxyerr= (and a bunch of incomprehensible letters and numbers I won't include here)
Connection: close
Content-Length: 2959
我的主要目标是打印出没有错误的元数据和想要的网站内容,但它似乎并不起作用。它也给了我一个html脚本,但它没有给予我我想要的东西,www.example.com页面上的打印文本facebook.com写着“在Facebook上与朋友和你周围的世界联系”。
我做错了什么/接近错了什么?
1条答案
按热度按时间tez616oj1#
首先,这不是一个有效的HTTP请求。您收到的错误来自您在网络中的(透明)代理,但即使没有这样的代理,Facebook本身也会拒绝该请求,状态代码为400 Bad Request。
例如,请求中给出的位置不应该包含完整的URL,而应该只包含绝对路径,在本例中为
/
。这样请求就成功了,并返回一个301重定向到
https://facebook.com/
。您需要提取这个重定向并遵循该重定向,这也意味着您需要在代码中实现对TLS的支持。一般来说:使用
requests
等已建立的HTTP库。这些库a)使用起来更简单,b)更有可能工作。如果你坚持自己编写(喜欢学习),那么请研究相关的标准,而不是猜测协议可能如何工作。