首页 > 编程问答 >将 HTTP 分块编码数据流代码片段从 Node.js 转换为 Python

将 HTTP 分块编码数据流代码片段从 Node.js 转换为 Python

时间:2024-08-01 06:48:19浏览次数:12  
标签:python node.js http chunked-encoding

我有一个 Node.js 客户端代码,它将请求发送到 HTTP 服务器,然后连续接收分块编码数据。

这是带有一些流量数据输出的 Node.js 代码。

const http = require('http');

const options = {
   hostname: '...',
   path: '...',
   port: ...,
...
};

const req = http.request(options, (res) => {

   res.on('data', (data) => {
      data_size += data.length;
      average_data_rate = data_size / (Math.round(Date.now() / 1000) - start_time);
      console.log(data.length + ', avg: ' + average_data_rate.toFixed(1) + ' /s');
   });

   res.on('end', () => {
      console.log('Body:', JSON.parse(data))
   });

}).on("error", (err) => {

   console.log("Error: ", err)

}).end()

我想将其转换为 Python3 ,但是不清楚连续数据接收部分怎么写。

import requests

url = '...'

my_headers = {
   ...
}

response = requests.get(url, ???, headers=my_headers) ???

import requests
import time

url = '...'
my_headers = {
   ...
}

data_size = 0
start_time = round(time.time())

with requests.get(url, headers=my_headers, stream=True) as response:
    response.raise_for_status()
    for chunk in response.iter_content(chunk_size=8192):
        if chunk:
            data_size += len(chunk)
            average_data_rate = data_size / (round(time.time()) - start_time)
            print(f"{len(chunk)}, avg: {average_data_rate:.1f} /s")

    if response.headers.get('content-type') == 'application/json':
        print('Body:', response.json()) 
    else:
        # 处理非 JSON 响应
        print("Body:", response.content)

说明:

  1. stream=True : 我们在 requests.get 中设置 stream=True 来启用流式响应。这可以避免将整个响应体一次性加载到内存中,对于大型数据流很有用。

  2. response.iter_content(chunk_size=8192) : 这会迭代响应内容的块。 chunk_size 指定一次读取的字节数(此处为 8KB)。 可以根据需要调整此值。

  3. 数据处理 : 在循环内部,我们计算接收到的数据量和平均数据速率,并像 Node.js 代码一样将其打印出来。

  4. 响应体处理 :

    • 我们首先检查响应头中的 content-type 是否为 application/json
    • 如果是,则使用 response.json() 将 JSON 响应解析为 Python 字典。
    • 如果不是,则打印原始响应内容 ( response.content )。 可以根据需要修改此部分来处理其他类型的响应。

此代码模拟了 Node.js 代码的行为,允许以流式方式处理分块编码的数据,并访问每个数据块及其相关信息。

标签:python,node.js,http,chunked-encoding
From: 78818561

相关文章