首页 > 解决方案 > 我用socket写了一个简单的python网站,但是没有输出或者错误?

问题描述

我正在观看有关 python 的视频,我想尝试代码,那是在我为 HTTP1.1 制作之后:


import socket
call = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
call.connect(('data.pr4e.org', 80))
req= 'GET /romeo.txt HTTP/1.1\r\nHost: http://data.pr4e.org'. encode() #(method, url, body=None, headers={})
call.send(req)

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

但是当我运行这段代码时,我没有得到任何输出

标签: pythonsockets

解决方案


这在多个层面上都是错误的:

  • 主机头的值应该是主机,而不是 URL。
  • 主机头没有行尾,。即失踪\r\n
  • HTTP 标头分隔符没有结尾,即另一个\r\n.
  • 读取响应假设服务器将立即关闭连接,即使使用了 HTTP/1.1,因此隐式 HTTP keep-alive 处于活动状态,即服务器可能在同一 TCP 连接中等待另一个请求。

HTTP 并不是看起来那么简单的协议。请在实施之前阅读实际标准,请参阅RFC 7230


推荐阅读