zoukankan      html  css  js  c++  java
  • python3 requests模块

    一、Requests用法:

    1、发送请求:

    1)、请求类型:
    req_obj = requests.get("https://www.baidu.com")
    requests支持多种请求类型:
    requests.post
    requests.put
    requests.delete
    requests.head
    requests.options

    2)、传递URL参数:
    payload = {'key1': 'value1', 'key2': 'value2'}
    req_obj = requests.get("https://www.baidu.com", params=payload)
    print(req_obj.url)
    输出:
    https://www.baidu.com/?key1=value1&key2=value2

     3、响应内容

    1)、文本响应内容:
    req_obj.text #响应内容Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。
    req_obj.encoding #输出编码格式,也可以对它进行赋值

    2)、对于非文本的响应内容:
    req_obj.content #输出二进制格式

    以下载一个图片为例:
    req_obj = requests.get("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1521793519116&di=c4f224e5bebdc582cca54b8d22fddcc5&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Ff9198618367adab45913c15e87d4b31c8601e4e8.jpg")
    with open('asd.jpg','wb') as f:
    f.write(req_obj.content)

    3)、json响应内容:
    req_obj = requests.get('https://github.com/timeline.json')
    print(req_obj.json())
    #成功调用 r.json() 并不意味着响应的成功,使用 r.raise_for_status() 或者检查 r.status_code 是否和你的期望相同

    4、定制请求头:

    headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
              'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
              'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'}
    
    req_obj = requests.get('https://github.com/timeline.json',headers=headers)

    5、复杂的POST请求:

    1)、可以是一个字典,是html请求的参数:
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.post("http://httpbin.org/post", data=payload)

    2)、可以是一个json数据:
    import json
    url = 'https://api.github.com/some/endpoint'
    payload = {'some': 'data'}
    r = requests.post(url, data=json.dumps(payload))

    3)、可以使用自行编码:
    url = 'https://api.github.com/some/endpoint'
    payload = {'some': 'data'}
    r = requests.post(url, json=payload)

    注:上面两种的区别是:
      json 表示使用application/json方式提交请求  
      data 使用application/form-urlencode方式提交请求

    6、响应状态码:

    req_obj = requests.get("https://www.baidu.com", params=payload)
    print(req_obj.encoding)
    print(req_obj.status_code == requests.codes.ok)
    
    req_obj.raise_for_status()   #如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应)会抛出异常

    7、其他一些使用方式:

    req_obj = requests.get("https://www.baidu.com")
    print(req_obj.headers)    #响应头
    print(req_obj.cookies) #响应Cookies
    print(req_obj.history) #请求历史
    requests.get('http://github.com', allow_redirects=False)  #禁用重定
    requests.get('http://github.com', timeout=0.001) #设置超时时间

    with open('massive-body',‘rb’) as f:
    requests.post('http://some.url/streamed', data=f) #上传文件

     requests.get('https://github.com', verify=True)  #开启证书验证(默认开启)

    一些高级的用法见:

    http://docs.python-requests.org/zh_CN/latest/user/advanced.html#streaming-uploads

    异步非阻塞请求:https://github.com/kennethreitz/grequests

  • 相关阅读:
    python-生成器
    python—迭代器
    python—递归函数
    CentOS关闭防火墙
    OpenHCI
    USB电源管理
    USB相关的网络资料
    USB Packet Types
    USB描述符概述
    Core Java Volume I — 1.2. The Java "White Paper" Buzzwords
  • 原文地址:https://www.cnblogs.com/chimeiwangliang/p/8629821.html
Copyright © 2011-2022 走看看