【问题标题】:How do I imitate an http request in python如何在python中模仿http请求
【发布时间】:2019-12-08 04:25:07
【问题描述】:

我想构建一个 python http 服务器(使用 Django 或 Flask 等),我将其称为 X。另外,在另一台机器上还有另一个 python 服务,我将其称为 Y,还有一个 HTTP 服务器 Z在只能由 Y 访问的机器上运行。我希望 X 模仿 Z。更正式地说:当 X 在 http://x/PATH 上收到请求时,我想将整个请求(方法、标头、cookie、正文等)序列化为二进制字符串,通过安全连接将其传输到 Y,Y 向http://z/PATH 发出完全相同的请求,将整个响应(再次包括标头等)序列化为二进制字符串并通过安全通道将其传输到 X,并且X 向客户端提供相同的响应,几乎就像客户端连接的是 Z 而不是 X。

这实际上是一个代理,但我希望能够使用我开发的 X 和 Y 之间的自定义通信通道来完成所有这些工作(它使用 websockets,因此是全双工的)。我的意思是,只要它支持传输字符串,就可以使用任何通信通道。我愿意使用 SOCKS 等。我只是不知道如何。我需要技术细节而不仅仅是想法。

另外,我目前并不坚持也支持 websocket,但如果可以的话,那就太好了。

【问题讨论】:

标签: python django http networking websocket


【解决方案1】:

您可以使用 requests 库创建/发送消息的副本(显示 get)。

import requests 

# api-endpoint 
URL = "http://Z/PAth"
parameter_information= "some information"
PARAMS = {'address':parameter_information} 

# sending get request and saving the response as response object 
r = requests.get(url = URL, params = PARAMS) 

【讨论】:

  • 我的主要问题是如何获取请求和响应数据以及要考虑哪些参数、如何处理 cookie 和本地存储等,并且可能有比序列化所有请求数据更好的解决方案.
  • 这似乎符合您的要求:stackoverflow.com/questions/6656363/…。关键是要遍历所有要发送的标头和字段数据。
  • cookie 怎么样?我不想发送单个请求,可能会有更多请求发送到服务器,Z 想要使用 cookie 等。
  • 可以在请求中设置cookies。其他stackoverflow帖子中对此进行了详细说明。 resp = requests.request(method=request.method, url=request.url.replace(request.host_url, 'new-domain.com'), headers={key: value for (key, value) in request.headers if key != 'Host'}, data=request.get_data(), cookies=request.cookies, allow_redirects=False)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
相关资源
最近更新 更多