如何通过python请求连接发送原始数据

时间:2018-08-06 14:05:48

标签: python python-requests

我正在与一台服务器连接,该服务器在开始时需要进行一些HTTP通信(与GET / POST进行握手),但稍后会通过tcp切换到原始数据包。使用与最后一个带有“ connection:keep-alive”头的“ GET”数据包建立的连接来发送和接收原始数据包。 我已经设法使用response.raw._fp.read()和stream = True读取传入的数据,但是我找不到将数据发送回服务器的方法。

所谓原始数据包,是指字节流,没有任何方法/ URL或标头。

resp = session.get(
    'http://server.server/test',
    stream=True
)

while True:
    try:
        header = resp.raw._fp._safe_read(8)
        if header[3]>0:
            data = resp.raw._fp._safe_read(header[3])
    except http.client.IncompleteRead:
        break

1 个答案:

答案 0 :(得分:0)

您想要做的是从请求创建的连接中获取底层套接字,幸运的是,您可以将其用于流连接。

import requests
import socket
r = requests.get('http://server.server/test', stream=True)
s = socket.fromfd(r.raw.fileno(), socket.AF_INET, socket.SOCK_STREAM)

之后,您可以像发送其他套接字一样发送数据。对于非流式连接的附带说明,在返回响应对象之前清理了文件描述符,因此您也可以在“响应”回调中实现此功能。