zoukankan      html  css  js  c++  java
  • Python-Requests

    一、发送请求

    import requests
    r = requests.get('https://api.github.com/events')
    r = requests.post('http://httpbin.org/post', data = {'key':'value'})
    

    二、URL传参

    2.1:普通参数

    url = 'http://httpbin.org/get'
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.get(url=url, params=payload)
    print(r.url)
    # http://httpbin.org/get?key2=value2&key1=value1
    

    2.2:一键多值

    url = 'http://httpbin.org/get'
    payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
    r = requests.get(url=url, params=payload)
    print(r.url)
    # http://httpbin.org/get?key1=value1&key2=value2&key2=value3
    

    三、响应内容

    3.1:unicode 字符

    import requests
    r = requests.get('https://api.github.com/events')
    print(r.text)    # 获取响应内容
    print(r.encoding)   # 'utf-8'
    

    3.2:二进制响应内容,获取照片

    import requests
    url = 'https://b-ssl.duitang.com/uploads/item/201504/29/20150429075539_cy8vV.jpeg'
    r = requests.get(url)
    path = 'img/1.jpg'
    with open(path, 'wb') as f:
        """写入一张照片"""
        f.write(r.content)
    

    3.3:JSON 响应内容

    JSON 解码器

    import requests
    r = requests.get('https://api.github.com/events')
    print(r.json())
    print(r.text)
    

    3.4:响应状态码

    r = requests.get('http://httpbin.org/get')
    print(r.status_code)    #200
    print(r.status_code == requests.codes.ok)   # True
    

    3.5:响应头

    r = requests.get('http://httpbin.org/get')
    print(r.headers)
    print(r.headers['Content-Type'])
    

    四、定制请求

    4.1:定制请求头

    url = 'https://api.github.com/some/endpoint'
    headers = {'user-agent': 'my-app/0.0.1'}
    r = requests.get(url, headers=headers)
    

    4.2:POST 请求

    url = "http://httpbin.org/post"
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.post(url, data=payload)
    print(r.text)
    

    4.3:一参多值POST

    你还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效:

    url = "http://httpbin.org/post"
    payload = (('key1', 'value1'), ('key1', 'value2'))
    r = requests.post(url, data=payload)
    print(r.text)
    

    4.4:str 转字典发送

    import json
    url = 'https://api.github.com/some/endpoint'
    payload = {'some': 'data'}
    r = requests.post(url, data=json.dumps(payload))
    r = requests.post(url, json=payload)
    print(r.text)
    

    五、上传文件

    5.1:上传一个xls

    url = 'http://httpbin.org/post'
    files = {'file': open('report.xls', 'rb')}
    r = requests.post(url, files=files)
    print(r.text)
    

    5.2:显式地设置文件名,文件类型和请求头

    url = 'http://httpbin.org/post'
    files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
    r = requests.post(url, files=files)
    print(r.text)
    

    5.3:发送作为文件来接收的字符串

    url = 'http://httpbin.org/post'
    files = {'file': ('report.csv', 'some,data,to,send
    another,row,to,send
    ')}
    r = requests.post(url, files=files)
    print(r.text)
    

    六、Cookie

    6.1:访问Cookie

    url = 'http://example.com/some/cookie/setting/url'
    r = requests.get(url)
    data = r.cookies['example_cookie_name']
    print(data)
    print(r.cookies['example_cookie_name'])
    

    6.2:发送cookies到服务器

    url = 'http://httpbin.org/cookies'
    cookies = dict(cookies_are='working')
    r = requests.get(url, cookies=cookies)
    print(r.text)
    

    6.3:传Cookie Jar到Requests 中

    Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

    jar = requests.cookies.RequestsCookieJar()
    jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
    jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
    url = 'http://httpbin.org/cookies'
    r = requests.get(url, cookies=jar)
    print(r.text)
    

    七、超时

    r = requests.get('https://github.com', timeout=2)
    print(r.text)
    

    八、重定向与请求历史

    Github 将所有的 HTTP 请求重定向到 HTTPS:

    r = requests.get('http://github.com')
    print(r.url)
    print(r.status_code)
    print(r.history)
    

    九、错误与异常

    • 遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。
    • 如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。
    • 若请求超时,则抛出一个 Timeout 异常。
    • 若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
    • 所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。

    参考Requests快速上手

  • 相关阅读:
    基于策略模式简单实现element表单校验
    跨域
    原型模式
    单例模式
    vue-router进阶篇
    vue-router
    h5深度剖析
    js同步异步,任务队列
    JavaScript中事件委托(事件代理)详解
    网络请求get和post的区别
  • 原文地址:https://www.cnblogs.com/xuwei1/p/11069483.html
Copyright © 2011-2022 走看看