如何将“ requests.get”的结果发送到另一个套接字?

时间:2019-10-18 11:57:30

标签: python python-3.x python-requests

我正在尝试为自己的需求制作某种专用的代理服务器。 应用程序监听某个端口,当我使用cURL连接到该端口时,它会打开一个套接字(将其称为“ my_socket” )。我从那里获取一些数据,根据需要对其进行修改,然后使用HTTPS向另一台服务器发出请求:

my_request = "https://whatever.com/params"
my_response = requests.get(my_request)

现在,我想将带有所有标头和有效负载的my_response发送到打开的套接字。某种

my_socket.send(my_response)

但是套接字接受类似字节的对象,而 my_response HTTPResponse 。这会导致错误。 有人可以建议我如何将 HTTPResponce 转换为字节吗,或者我可以使用任何其他方法来传输数据?我想我可以从 my_response 中手动提取所有数据并手动组合响应,但是也许有更简单的方法吗? 谢谢。

更新 我尝试过

my_socket.send(my_response.content)

,但另一端无法将其解码为任何文本。看起来像这样:

curl -o /dev/null -v -s -k "http://127.0.0.1:8080/my_cool_request"
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /my_cool_request HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.47.0
> Accept: */*
> 
{ [16380 bytes data]
* Connection #0 to host 127.0.0.1 left intact

Update2 。 我从 my_response.headers 发送标头。

    my_lenth=len(my_response.content)
    my_header="HTTP/1.1 " + str(my_response.status_code)+" " + my_response.reason
    for key in my_response.headers:
        my_header+=key+": "+r.headers[key]+"\n"
    my_header+="Content-Length: "+str(my_lenth)+"\n"
    header_encoded=my_header.encode()
    my_socket.send (header_encoded)
    my_socket.send(r.content)

这不是最终版本,因为我的cURL仍然出现错误:

* Illegal or missing hexadecimal sequence in chunked-encoding

There is an explanation why it is happening

2 个答案:

答案 0 :(得分:0)

Response-Class的 content 变量是类似字节的对象:

response = requests.get("https://google.com")
mySocket.send(response.content)

答案 1 :(得分:0)

正如索非亚所说,您可以使用 response.content。
但一般来说,您应该知道,如果您有一个字符串对象,就可以做到
str.encode()使其成为类似字节的对象;

x = "hello, world!"
x.encode()

然后将其返回到字符串,请使用 str.decode()

x = b"hello, world!"
print(x.decode())