无法在python中发送文件内容和http标头

时间:2015-09-18 08:06:47

标签: python html

我有一个文件,我正在阅读如下。 [忽略所有与连接相关的参数]

somefile=open(/path/to/some/file,'rb')
READ_somefile=somefile.read()
somefile.close()
client_connection.send((str.encode('HTTP/1.1 200 OK\nContent-Type: image/png\n\n')))
client_connection.send((READ_somefile))

当我使用上面的代码时,我能够正确显示我的html网页。 但我想只使用一个发送而不是两个发送问题。 我尝试使用以下

client_connection.send((str.encode('HTTP/1.1 200 OK\nContent-Type: image/png\n\n',READ_somefile)))

我收到以下错误。

client_connection.send((str.encode('HTTP/1.1 200 OK\nContent-Type: image/png\n\n',READ_somefile)))
TypeError: encode() argument 1 must be str, not bytes

然后我尝试使用它。

client_connection.send((str.encode('HTTP/1.1 200 OK\nContent-Type: image/png\n\n',str(READ_somefile))))

我收到以下错误。

client_connection.send((str.encode('HTTP/1.1 200 OK\nContent-Type: image/png\n\n',str(READ_somefile))))
LookupError: unknown encoding: b'/*!

是否可以告诉我应该使用哪种编码来同时发送标题和内容?

请注意,我不能使用任何外部模块。

1 个答案:

答案 0 :(得分:0)

签名是socket.send(bytes[, flags]) - 所以

  1. 您要传递字节字符串
  2. 您希望将其作为单个参数传递
  3. 你拥有的是什么

    1. 标题'HTTP/1.1 200 OK\nContent-Type: image/png\n\n',当前是一个unicode字符串,因此需要编码为字节字符串
    2. 一个正文(图像的二进制数据),它已经是一个字节字符串,所以不需要编码
    3. 明显的解决方案是:

      with open(/path/to/some/file,'rb') as somefile:
          body = somefile.read()
      header = 'HTTP/1.1 200 OK\nContent-Type: image/png\n\n'.encode()
      payload = header + body
      client_connection.send(payload)