我命令中的encode()函数正在向

2024-10-01 05:06:27 发布

您现在位置:Python中文网/ 问答频道 /正文

当我执行这个脚本时,我总是得到一个错误的请求输出。我不明白出了什么问题。我想打印cmd变量的输出,我看到一个b'作为前缀。我认为这就是它作为请求发送到服务器的方式,结果它失败了。顺便说一下,它是python3.7.0

我的代码片段如下:

import socket

brows = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
brows.connect(('data.pr4e.org', 80))
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\n\n'.encode()
print(cmd)
brows.send(cmd)

while True:
    data = brows.recv(512)
    if (len(data) < 1):
        break
    print(data.decode())
brows.close()

我的输出如下:

enter image description here

我对Python完全陌生。有人能帮我解决这个问题吗


Tags: 代码orgimport服务器脚本cmddata错误
1条回答
网友
1楼 · 发布于 2024-10-01 05:06:27

我认为b'不是问题所在。这就是bytes对象(这就是.encode()返回的内容)被打印或转换成带有str()的字符串的方式

我不知道你的服务器是什么样子的,但我猜问题出在请求中,而不是Python

不过,我要提出另一个建议。使用with确保套接字在结束时自动关闭,无论是否出现故障。实际上,如果程序有异常,套接字将不会关闭。with语法告诉Python尝试运行它,完成后自动关闭它

with socket.socket(...) as brows:
    # socket is open; we can do stuff with it
    brows.connect(...
# The socket is no longer open here

您甚至不需要在结尾显式调用.close()

编辑:为了澄清,套接字只在with块中打开

相关问题 更多 >