websocket 使用Pything通过socket和http连接到网站时出现的问题

aydmsdu9  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(170)

我是套接字编程的新手,我基本上使用套接字库编写了一些代码,这些代码应该打印元数据和我想要的网站的网站内容--在我的例子中是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上与朋友和你周围的世界联系”。
我做错了什么/接近错了什么?

tez616oj

tez616oj1#

GET = 'GET http://www.facebook.com HTTP/1.0\r\n\r\n'.encode()

首先,这不是一个有效的HTTP请求。您收到的错误来自您在网络中的(透明)代理,但即使没有这样的代理,Facebook本身也会拒绝该请求,状态代码为400 Bad Request。
例如,请求中给出的位置不应该包含完整的URL,而应该只包含绝对路径,在本例中为/

GET = 'GET / HTTP/1.0\r\nHost: facebook.com\r\n\r\n'.encode()

这样请求就成功了,并返回一个301重定向到https://facebook.com/。您需要提取这个重定向并遵循该重定向,这也意味着您需要在代码中实现对TLS的支持。
一般来说:使用requests等已建立的HTTP库。这些库a)使用起来更简单,b)更有可能工作。如果你坚持自己编写(喜欢学习),那么请研究相关的标准,而不是猜测协议可能如何工作。

相关问题