ant*_*pug 3 python http httpresponse
我有一个HTTP响应
HTTP/1.0 200 OK\r\n\r\n
<!DOCTYPE html>...
Run Code Online (Sandbox Code Playgroud)
Firefox和Chrome似乎都很好理解它并显示HTML内容 - 但Safari和Opera只是以纯文本显示所有内容.添加"内容类型"字段会使所有浏览器的内容混乱.
有什么收获?
我不会发布完整的代码,因为有很多与该问题无关的任意编程逻辑,但是,发生的事情是这样的:
我创建一个套接字,然后发生所有相关的套接字操作 - 这一切都像魔术一样,然后经过所有处理我.send('响应在这里')并且出于某种原因它只在Firefox和Chrome上显示.
响应字符串如下所示:
'''
HTTP/1.1 200 OK\r\n
<!DOCTYPE html>
...
...
</html>
'''
Run Code Online (Sandbox Code Playgroud)
这就是我所看到的:http: //cl.ly/0y0U1s0G3X2v1C11282S
您声明您要发送一个文字字符串,如:
'''
HTTP/1.1 200 OK\r\n
<!DOCTYPE html>
...
'''
Run Code Online (Sandbox Code Playgroud)
但是,Python只会\n在三引号字符串中添加与换行符相对应的单个行.所以发送的字节最终成为
HTTP/1.1 200 OK\r\n\n<!DOCTYPE html>...
Run Code Online (Sandbox Code Playgroud)
如你所见,有一个缺失\r.我建议你使用如下代码:
sock.send("HTTP/1.1 200 OK\r\n\r\n")
Run Code Online (Sandbox Code Playgroud)
在上面,您可能想要添加Content-type标题:
sock.send("HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n")
Run Code Online (Sandbox Code Playgroud)
然后,在发送标题后,发送文档有效负载:
sock.send('''
<!DOCTYPE html>
...
''')
Run Code Online (Sandbox Code Playgroud)
这将协议级标头与数据有效负载分开,使您的代码更易于理解.\r\n在标题中获得正确性也更容易,因为这是重要的.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |