码迷,mamicode.com
首页 > 其他好文 > 详细

requests库

时间:2018-11-21 15:52:41      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:ack   多个   header   ssi   指定   none   urllib   head   div   

Request

  • pip3 install requests

  • res = requests.get(url,params) 获取响应网页对象,params以字典形式向url传参,value值为None不会传入。

    import requests
    params = {name:km,age:22}
    headers = {Server:likun}
    res = requests.get(http://httpbin.org/get,params=params,stream=True,headers=headers)
    • res.text 打印响应内容

    • res.encoding 当前响应使用的编码,可以重新赋值改变使用自己合适的编码

    • res.content 二进制响应内容

    • res.json() json响应内容

    • res.raw 获取原始响应数据,需在get请求中加参数stream=True

    • res.headers 获取请求头

      • res = requests.get(url,params,headers=headers) 自己添加请求头

    • res.cookies 获取cookies

      • 如果想发送cookies到服务器,可以使用cookies参数

        cookies = {cookies_are:working}
        res = requests.get(http://httpbin.org/cookies,cookies=cookies)
        print(res.text)
        ?
        {"cookies": {"cookies_are": "working"}}
    • res.status_code 状态码

      • res.status_code == requests.codes_ok 内置的状态码查询,200返回True

      • res.raise_for_status() 如果发送错误的4xx或5xx请求,可以用这个函数抛出异常

    res = requests.get(http://httpbin.org/status/404)
    print(res)
    res.raise_for_status() 
  • requests.post(url,params) post传数据

    • 发送以表单形式的数据,data参数以字典形式上传

      data = {key1:value1,key2:value2,key2:value3}#同一key值自动处理在一起
      res = requests.post(http://httpbin.org/post,data=data)
      {
        ...
        "form": {
          "key1": [
            "value1",
            "value2"
          ]
        },
        ...
      }
    • 流式上传,发送大文件时无需先把它们读入内存。

      with open(massive-body,rb) as f:
          requests.post(http://some.url/streamed,data=f)
    • res.request.post(‘http://httpbin.org/post‘,files=files) files二进制上传

      files = {file:open(1.jpg,rb)}
      res = requests.post(http://httpbin.org/post,files=files)
  • 证书验证:Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。SSL 验证默认是开启的,如果证书验证失败,Requests 会抛出 SSLError: requests.exceptions.SSLError 报错。

    • 也可以为verify传入CA_BUNDLE 文件路径,或者包含可信任 CA 证书文件的文件夹路径:

    • 改为False除去证书验证

    import requests
    from requests.packages import urllib3
    urllib3.disable_warnings() #调用这个包消除警告信息
    res = request.get(http://www.12306.cn,verify=False)
    print(res.status_code)
    ?
    200
    • cert参数指定本地证书作为客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组:

      requests.get(https://kennethreitz.org, cert=(/path/client.cert, /path/client.key))
      <Response [200]>
  • 设置代理:proxies 参数设置代理ip

    proxies = {
            http:http://127.0.0.1:9743,
            https:https://127.0.0.1:9743
            }
    res = requests.get(http://www.taobao.com,proxies=proxies)
    • 有用户名的代理

      proxies = {http:http://user:password@127.0.0.1:9743/}
  • 超时设置:timeout 参数

    res = res = requests.get(http://www.taobao.com,timeout=1)
  • 异常处理:requests.exceptions基类

  • 会话对象,会话维持:会话对象可以让你保持连接状态,跨站请求保持某些参数。它是一个Session实例,这个实例会在所有的请求之间保持cookie。所以如果你向同一主机发送多个请求,底层的TCP会被重用,从而带来显著地性能提升。

    • 同一会话中的连接状态都是持久的,urllib3自动处理

    #跨站保持cookies
    import requests
    s = requests.Session()
    s.get(http://httpbin.org/cookies/set/sessioncookie/123456789)
    res = s.get("http://httpbin.org/cookies")
    print(res.text)
    {"cookies": {"sessioncookie": "123456789"}}
  • 会话对象也可以为请求方法传参
s.headers.update({x-test: true})#添加新的值
res = s.get(http://httpbin.org/headers, headers={x-test2: true})
{
  "headers": {
    "Accept-Encoding": "identity", 
    "Connection": "close", 
    "Cookie": "sessioncookie=123456789", 
    "Host": "httpbin.org", 
    "X-Test": "true", 
    "X-Test2": "true"
  }
}

  持续更...                     

 

requests库

标签:ack   多个   header   ssi   指定   none   urllib   head   div   

原文地址:https://www.cnblogs.com/kmnskd/p/9994112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!