我是Python的新手,正在尝试从网站打开.txt文件。
我的代码是:
import socket
mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysocket.connect(('data.pr4e.org', 80))
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\n\n'.encode()
mysocket.send(cmd)
while True:
data = mysocket.recv(512)
if (len(data)<1):
break
print(data.decode())
mysocket.close()
我得到消息: 错误的请求-您的浏览器发送了此服务器无法理解的请求。
我可以使用urllib读取.txt文件,但我不明白为什么它不能以这种方式工作。
答案 0 :(得分:1)
您可以只使用请求吗?
# python -m pip install —user requests
import requests
r = requests.get('http://data.pr4e.org/romeo.txt')
print(r.text)
或
from urllib import request
r = request.urlopen('http://data.pr4e.org/romeo.txt')
text = b''
for line in r:
text+=line
print(text)
最后一个工作的插座
import socket
uri = 'data.pr4e.org'
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((uri, 80))
cmd = f'GET /romeo.txt HTTP/1.0\r\nHost: {uri}\r\n\r\n'.encode()
s.send(cmd)
while True:
data = s.recv(512)
if (len(data)<1):
break
print(data.decode())
答案 1 :(得分:1)
问题出在您的请求中\ n \ n。
“请求/状态行和标头必须全部以CR LF结尾(即回车后跟换行符)。”
您需要使用\ r \ n
将行更改为此:
cmd = 'GET data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()
此处的答案相同: Getting a 400 Bad Request Error Using Socket in Python 3