• requests--传递参数


    传递参数 

    传递URL参数
    data = {'city': '北京'}
    # 参数有中文如果发送不了,必须要编码
    city = parse.urlencode(data).encode('utf-8')

    一般在GET请求中使用查询字符串(query string)来进行参数传递,在requests库中使用如下方法:

    import requests
    
    base_url = 'http://httpbin.org'
    # 将参数存在字典里
    params_data = {"user": "zou", "pwd": '31500'}
    
    r = requests.get(base_url + '/get', params=params_data)
    print(r.url)  # 打印URL
    print(r.status_code)

    结果

    http://httpbin.org/get?user=zou&pwd=31500
    200
    传递body参数

    在post请求里有两个参数,data为form表单格式的,json为Content-Type是json格式的。返回的值如果是json格式的,可以用r.json(),r.text不管是json格式还是html格式的都可以

    在POST请求中,一般参数都在请求体中传递,在requests中用法如下:

    import requests
    
    base_url = 'http://httpbin.org'
    # 将参数存在字典里
    form_data = {"user": "zou", "pwd": '31500'}
    
    r = requests.post(base_url + '/post', data=form_data)
    print(r.url)  # 打印URL
    print(r.status_code)
    print(r.text)  # 打印出响应文本

    结果:

    http://httpbin.org/post
    200
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "pwd": "31500", 
        "user": "zou"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Content-Length": "18", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.18.4"
      }, 
      "json": null, 
      "origin": "112.10.81.210, 112.10.81.210", 
      "url": "https://httpbin.org/post"
    }

    data和json的区别

    如果我们发送post请求时,里面有个参数json,还有个参数时data,它们都是提交的服务器的数据,那它们有什么区别呢?

    data与json既可以是str,也可以是dict

    区别如下:

    不管json是str还是dict,如果不指定headers中的content-type,默认为application/json


    data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式,此时数据可以从request.POST里面获取,而request.body的内容则为a=1&b=2的这种形式,注意,即使指定content-type=application/json,request.body的值也是类似于a=1&b=2,所以并不能用json.loads(request.body.decode())得到想要的值

    data为str时,如果不指定content-type,默认为application/json

    原始响应内容

    可以找出 Requests 使用了什么编码,并且能够使用r.encoding 属性来改变它:

    r.encoding  # 获取编码格式
    'utf-8'

    r.encoding = 'ISO-8859-1' # 设置编码格式

    在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做:

    >>> r = requests.get('https://api.github.com/events', stream=True)
    >>> r.raw
    <requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
    >>> r.raw.read(10) 'x1fx8bx08x00x00x00x00x00x00x03'

    如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过Response.raise_for_status() 来抛出异常:

    >>> bad_r = requests.get('http://httpbin.org/status/404')
    >>> bad_r.status_code
    404
    
    >>> bad_r.raise_for_status()
    Traceback (most recent call last):
      File "requests/models.py", line 832, in raise_for_status
        raise http_error
    requests.exceptions.HTTPError: 404 Client Error
  • 相关阅读:
    如何实现多个异步同步执行?
    Treap学习笔记
    实验
    bzoj2876 [NOI2012]骑行川藏(拉格朗日乘数法)
    [SCOI2007]最大土地面积(旋转卡壳)
    Splay学习笔记
    计算几何学习笔记
    [CQOI2006]凸多边形(半平面交)
    大数的乘法(C++)
    商人过河问题(DFS)
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11406703.html
Copyright © 2020-2023  润新知