白如意i 2024-08-10 17:45 采纳率: 100%
浏览 37
已结题

如何让 python 正确发起 http2 请求?

python 代码的问题。一个请求浏览器中发起是 http2 协议的,能成功请求,但是抓到 postman 或者放到代码中发起请求的时候是 http1.1 的,服务器给我返回 403 了。下面的代码看似是发起了 http2 请求,但实际上还是返回了 403,不知道哪里的问题。这个请求经过 fiddler 代理的时候又能成功。

import json

import httpx

client = httpx.Client(http2=True)

url = "https://api.dhldanhao.com/waybill/listForCodes"

payload = {
  "page_size": "",
  "begin_time": "1722960000",
  "end_time": "",
  "types": "USPS",
  "codes": "41035",
  "sn_status": "1",
  "start_address": ""
}
headers = {


  'accept': 'application/json, text/plain, */*',
  'accept-language': 'zh-CN,zh;q=0.9',
  'access-control-allow-origin': '*',
  'content-type': 'application/json',
  'origin': 'https://www.dhldanhao.com',
  'priority': 'u=1, i',
  'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"macOS"',
  'sec-fetch-dest': 'empty',
  'sec-fetch-mode': 'cors',
  'sec-fetch-site': 'same-site',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}


response = client.request("POST", url, headers=headers, content=json.dumps(payload))

print(response.http_version)
print(response.status_code)
  • 写回答

23条回答 默认 最新

  • wn531 2024-08-11 16:13
    关注

    1)先用命令确认下站点是否支持http2.0,你会发现有些站点本身就不支持,比如下面Google支持,百度不支持。

    curl -I -k --http2 https://www.baidu.com
    curl -I -k --http2 https://www.google.com
    

    img

    2)在代码里,也可以通过返回值查看,

    
    import httpx
    
    # url = "https://www.baidu.com"
    
    url = "https://www.google.com"
    
    # 创建一个支持 HTTP/2 的客户端
    with httpx.Client(http2=True) as client:
        response = client.get(url)
        print(response.status_code)
        print(response.text)
        print(response.http_version)  # 2.0
    
    
    

    3) 403这个http错误码,一般是服务端鉴权失败的返回值,也就是说的你请求应该是鉴权不通过,被拒了。和你使用1.1 还是2.0协议请求没有直接关系。

    以上全部认真手敲且亲自试过,才进行回答,如若有帮助,还望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(22条)

报告相同问题?

问题事件

  • 系统已结题 8月25日
  • 已采纳回答 8月17日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图