zoukankan      html  css  js  c++  java
  • requests 进阶用法学习(文件上传、cookies设置、代理设置)

    一、文件上传

      1、模拟网站提交文件

     提交此图片,图片名称:timg.jpg

    import requests
    
    files={
        'file':open('timg.jpg','rb')
    }
    response=requests.post('http://httpbin.org/post',files=files)
    print(response.text)
    {
      "args": {}, 
      "data": "", 
      "files": {
        "file": "data:application/octet-stream;base64..."
     }, 
      "form": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Connection": "close", 
        "Content-Length": "27595", 
        "Content-Type": "multipart/form-data; boundary=bfa4e305bf1a07aeff0b161b6b6acd98", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.20.1"
      }, 
      "json": null, 
      "origin": "119.123.198.80", 
      "url": "http://httpbin.org/post"
    }
    提交文件得到的返回信息

    二、cookies  (requests获取和设置cookies只需要一步)

      1、什么是cookie

      使用r.cookies获取cookie(key,value) 

    import requests
    
    r=requests.get("http://www.hao123.com")
    print(r.cookies)
    
    for key,value in r.cookies.items():
        print(key+'='+value)

      结果显示cookies

    <RequestsCookieJar[<Cookie BAIDUID=D08FC3C77CD769084E0F74D7A4B1415D:FG=1 for .hao123.com/>, <Cookie hz=0 for .www.hao123.com/>, <Cookie ft=1 for www.hao123.com/>, <Cookie v_pg=normal for www.hao123.com/>]>
    BAIDUID=D08FC3C77CD769084E0F74D7A4B1415D:FG=1
    hz=0
    ft=1
    v_pg=normal

      2、cookie的作用:维持登录状态

         如何使用cookie:在header中包含登录信息的cookies即可维持回话登录.

    import requests
    
    headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
     'cookie':'_zap=90f75832-31eb-4d2d-b35f-9ccaf9fb751d; d_c0="ABDix0gVng6PTouChpyAoAQ3G7to4zgcmSA=|1543906948"; capsion_ticket="2|1:0|10:1543906948|14:capsion_ticket|44:YjVkZTgwZGJhMDkxNDk1Nzk0ZWQzY2QxNmY3Y2I4ZTA=|5eb3fc941322cc1a46641b7a01cf3e1d4bd2af3e957c9034e11bf5ce866beef4"; q_c1=cf87a31041fd439286ff979925591375|1543906958000|1543906958000; r_cap_id="Y2Y5ODA2MzcwNjc2NGY2NTg3YzBmMjY0ODgzNzVjZTY=|1543906958|90e763acce4047123b3af3f2704353c655212d04"; cap_id="YjY2MmE1ZDZkNWRmNDY3NWI0ZTE0NDM5OWQ4ZGIyN2Y=|1543906958|cfd125126f4cb0595540b10a1345fe83ed78b54c"; l_cap_id="YzhkZmY1ZGE4MTI5NGFkY2I2OWEyNzEzYmUzYzc1NTk=|1543906958|cfb980d103d69a8a16e49fbc84d6c9eb9f259656"; z_c0="2|1:0|10:1543907047|4:z_c0|92:Mi4xdVdsa0RRQUFBQUFBRU9MSFNCV2VEaVlBQUFCZ0FsVk41M1R6WEFEcGZiR3REaExaUzU2QVI1RUs1cjFHSWhlTGRn|8cffbfc2e83f1bbf0b257fe911a35f32e1411981c36631e680d48b52cbb4acdf"; __gads=ID=ca4c27d035179b38:T=1543907482:S=ALNI_MaXKoFRpK-yi_viwOXIAxef01d82A; tst=h; _xsrf=90cd6bdbf65ff7b9f06741d408360edf; _xsrf=nMfSyfddjAeWdq5Fjx3UFFJClFbYdPO4; __utma=155987696.97682671.1543926682.1543926682.1543926682.1; __utmz=155987696.1543926682.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); OUTFOX_SEARCH_USER_ID_NCOO=1988278338.5008798; tgw_l7_route=29b95235203ffc15742abb84032d7e75'
    }
    response=requests.get('http://www.zhihu.com',headers=headers)
    
    print(response.status_code)
    #请用自己的cookie

      

    三、会话维持session

       什么叫做会话维持:登陆成功后,在使用request希望能访问之后的页面,不需要重新输入账户密码的方式叫做会话维持。

    requests请求多个网页相当于启动了多个浏览器,这样就要多次设计cookies

    #Session回话维持
    import requests
    s=requests.Session()
    r1=s.get('http://httpbin.org/cookies/set/number/123456789')
    r2=s.get('http://httpbin.org/cookies')
    print(r1.text)
    print(r2.text)
    {
      "cookies": {
        "number": "123456789"
      }
    }
    
    {
      "cookies": {
        "number": "123456789"
      }
    }
    执行结果(网站的cookie信息一致)

    不适用Session回话维持,两次访问的结果如下

    import requests
    s=requests
    r1=s.get('http://httpbin.org/cookies/set/number/123456789')
    r2=s.get('http://httpbin.org/cookies')
    print(r1.text)
    print(r2.text)
    不适用Session代码
    {
      "cookies": {
        "number": "123456789"
      }
    }
    
    {
      "cookies": {}
    }
    不适用Session的cookie

       利用 Session ,可以做到模拟同个会话而不用担心 Cookies 的问题它通常用于模拟登录
    成功之后再进行下一步的操作

      

    四、SSL证书验证 

    impo:r:t requests
    于ram requests.packages import urllib3
    urllib3 .disable_warnings()
    response = requests.get (’ https : //州 .12306 . cn ’, verify= False)
    屏蔽证书验证警告

    五、代理设置proxies

    (1)代理格式1:

    proxies={
        'http':'http://10.10.1.10:3128',
        'https':'http://10.10.1.10:1080'
    }
    res=requests.get('http://www.taobao.com',proxies=proxies)

    (2)代理格式2:代理需要使用 HTTP Basic Auth ,可以使用类似 http://user:password@host:port 这样的语法来置代理 。

    proxies = {
    "http””http://user:password@10.10.1 .10:3128/”,
    }
    requests . get (咱ttps : I lwww. taobao. com”, proxies=proxies)

    六、超时设置(timeout=)

      超时一秒就开始报超时

    res=requests.get('http://www.taobao.com',timeout=1)

    七、身份认证

      1、格式一:

    import requests
    from requests.auth import HTTPBasicAuth
    r=requests.get('http://ww.baidu.com',auth=HTTPBasicAuth('username','password'))

      2、格式二

    import requests
    r=requests.get('http://ww.baidu.com',auth=('username','password'))

    八、构造请求结构--Prepared Request

    from requests import Request,Session
    
    url='http://httpbin.org/post'
    
    data={
        'name':'big pig'
    }
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    s=Session()
    #构造请求体
    req=Request('POST',url,data=data,headers=headers)
    prepped=s.prepare_request(req)
    r=s.send(prepped)
    print(r.text)

      这里我们引入了Request,然后用url、data和headers参数构造了一个Requestd对象,这时需要再调用Session的prepare_request( )方法将其转换为Prepare Request对象,然后调用send 方法发送,其运行结果:

    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "name": "big pig"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Connection": "close", 
        "Content-Length": "12", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "httpbin.org", 
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
      }, 
      "json": null, 
      "origin": "117.136.79.133", 
      "url": "http://httpbin.org/post"
    }
    运行结果

     

  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10161758.html
Copyright © 2011-2022 走看看