request 库改为 httpx的语法问题:

request 库改为 httpx的语法问题:
我有段request库的正常的代码,想改成用httpx异步库实现。但是我不知道怎么把 list类型请求体提交给httpx 库。
请问怎么下面代码里的 r = requests.post(url, data=json.dumps(url_list), headers=headers, proxies=None) 改成httpx实现?谢谢

def get_detail(url_list: list):
    url = "https://xxxxx.com/url-metrics"
    headers = {'Connection': 'keep-alive',
               'Content-Length': '255',
               'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
               'Accept': 'application/json, text/javascript, */*; q=0.01',
               'Content-Type': 'application/json; charset=UTF-8',
               'X-Bartender-Version': '2',
               'sec-ch-ua-mobile': '?0',
               'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
               'sec-ch-ua-platform': '"Windows"',
               'Sec-Fetch-Site': 'none',
               'Sec-Fetch-Mode': 'cors',
               'Sec-Fetch-Dest': 'empty',
               'Cookie': 'auth=ObDE1eqgN1IZBvvXnwQxJopRl8U1pYPRR2TYgVI6JgrznTjR0wOOFhlPbAghLqou;',
               'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6'
               }
    r = requests.post(url, data=json.dumps(url_list), headers=headers, proxies=None)
    print(r.text)



可以使用以下代码来替换原来的 requests.post() 方法:

import httpx

async def get_detail(url_list: list):
    url = "https://xxxxx.com/url-metrics"
    headers = {'Connection': 'keep-alive',
               'Content-Length': '255',
               'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
               'Accept': 'application/json, text/javascript, */*; q=0.01',
               'Content-Type': 'application/json; charset=UTF-8',
               'X-Bartender-Version': '2',
               'sec-ch-ua-mobile': '?0',
               'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
               'sec-ch-ua-platform': '"Windows"',
               'Sec-Fetch-Site': 'none',
               'Sec-Fetch-Mode': 'cors',
               'Sec-Fetch-Dest': 'empty',
               'Cookie': 'auth=ObDE1eqgN1IZBvvXnwQxJopRl8U1pYPRR2TYgVI6JgrznTjR0wOOFhlPbAghLqou;',
               'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6'
               }
    async with httpx.AsyncClient() as client:
        r = await client.post(url, json=url_list, headers=headers)
    print(r.text)

注意,我在这里将请求体的格式改为 json,并使用 httpx 的 AsyncClient 类来异步发送请求。

  • 这篇文章:httpx库详解 也许能够解决你的问题,你可以看下