为什么我的套接字无法从网页中检索文本?



刚刚开始学习套接字编程,做了一个基本的套接字,理论上可以连接到一个网站,并为我读取文本文本文件

msock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
msock.connect(('data.pr4e.org',80))
cmd = 'GET http://data.pr4e.org/authors.txt HTTP/1.0nn'.encode()
msock.send(cmd)
while True:
dat = msock.recv(512)
if len(dat) < 1:
break
print(dat.decode())
msock.close()

不是从网站上的txt文件中打印出文本块,而是得到这个

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.18 (Ubuntu) Server at do1.dr-chuck.com Port 80</address>
</body></html>

如何解决这个问题?

我在其他网站上尝试了多个其他txt文件,仍然得到类似的结果。也尝试了其他端口,但没有成功。

我当然不是HTTP协议方面的专家。但是,添加r并使用原始字节而不是字符串似乎可以工作:

import socket
msock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
msock.connect(("data.pr4e.org", 80))
cmd = b"GET http://data.pr4e.org/authors.txt HTTP/1.0rnrn"
msock.send(cmd)
alldata = bytearray()
while True:
dat = msock.recv(512)
if len(dat) < 1:
break
alldata.extend(dat)
msock.close()
print(alldata.decode())
$ python3 tmp.py
HTTP/1.1 200 OK
... more lines ...
Korean,Victor (Kwangchun) Lee (이광춘)

最新更新