zoukankan      html  css  js  c++  java
  • python http请求常见问题解决方案

    requests库官方文档:快速上手 - Requests 2.18.1 文档

    get请求但是需要用body传参

    将body参数放到data形参中传递,但是需要先将参数json.dumps()序列化

    data格式化

    如果请求失败,可以尝试在headers中添加'Content-Type': 'application/json'

    import requests
    
    params = {
        "username": "zhangsan"
    }
    
    resp = requests.request("GET", url, headers=headers, data=json.dumps(params))
    # 输出响应body
    logger.info("response:\n{}".format(resp.text)) # 没有格式化
    print(json.loads(resp.text)) # 格式化之后的
    
    # 也可以尝试使用.json()方法一步到位获取格式化之后的 response body
    print(resp.json())
    

    注意:

    这种情况下如果想使用postman来传参,需要将body中的参数放在选择「raw』形式的「body」,而不是form-data形式,否则得不到预期的请求结果,因为「raw」和 「form-data」两种形式还是有差别的。

    自动生成curl

    使用curlify库,使用前需要先 pip 安装

    import requests
    
    import curlify
    
    resp = requests.request("GET", url, headers=headers)
    curl = curlify.to_curl(resp.request)
    print(curl)
    

    参考:requests与CURL的相互转换 - 江湖乄夜雨 - 博客园

    如果想学习curl 命令,可以参考:curl命令常用参数

    获取请求 headers

    resp = requests.get(url)
    request_headers = resp.request.headers
    encoding = request_headers["encoding"]
    

    参考:requests模块获取请求和响应的信息_FreeSpider-CSDN博客_requests查看请求头

    url参数的编解码

    浏览器会对url中的中文字符进行编码,所以经常在url中看到很多%这样的转义字符,有时我们必须获取编码之前的参数列表,比如需要用encode之前的参数列表来生成签名,否则生成的签名是不可用的。有时候解码一次还不够,需要解码两次才可以获取原来的 url 。
    # 编码
    from urllib.parse import quote
    text = quote(text, encoding='utf-8')
    # 解码
    from urllib.parse import unquote
    text = unquote(text, encoding='utf-8')
     
  • 相关阅读:
    20161115学习笔记
    20161114学习笔记
    微服务
    20161111学习笔记
    20161110学习笔记
    统一ID生成服务
    BlockingQueue原理
    spring常用注解
    Spring 事件发布
    java8 DateUtil工具
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/15647614.html
Copyright © 2011-2022 走看看