• requests模块的高级用法


    SSL Cert Verification

    #证书验证(大部分网站都是https)
    import requests
    respone=requests.get('https://www.12306.cn') #如果是ssl请求,首先检查证书是否合法,不合法则程序终端报错
    
    #改进1:去掉报错,但是会报警告
    import requests
    respone=requests.get('https://www.12306.cn',verify=False) #不验证证书,报警告,返回200
    print(respone.status_code)
    
    #改进2:去掉报错,并且去掉警报信息
    import requests
    from requests.packages import urllib3
    urllib3.disable_warnings() #关闭警告
    respone=requests.get('https://www.12306.cn',verify=False)
    print(respone.status_code)
    
    #改进3:加上证书
    #很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书
    #知乎百度等都是可带可不带
    #有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站
    import requests
    respone=requests.get('https://www.12306.cn',
                         cert=('/path/server.crt',
                               '/path/key'))
    print(respone.status_code)

    使用代理

    #官网链接: http://docs.python-requests.org/en/master/user/advanced/#proxies
    
    #代理设置:先发送请求给代理,然后由代理帮忙发送(封ip是常见的事情)
    import requests
    proxies={
        'http':'http://lary:123@localhost:9743',#带用户名密码的代理,@符号前是用户名与密码
        'http':'http://localhost:9743',
        'https':'https://localhost:9743',
    }
    respone=requests.get('https://www.12306.cn',
                         proxies=proxies)
    
    print(respone.status_code)
    
    #支持socks代理,安装:pip install requests[socks]
    import requests
    proxies = {
        'http': 'socks5://user:pass@host:port',
        'https': 'socks5://user:pass@host:port'
    }
    respone=requests.get('https://www.12306.cn',
                         proxies=proxies)
    
    print(respone.status_code)

    超时设置

    timeout=0.1 #代表接收数据的超时时间
    timeout=(0.1,0.2)  #0.1代表链接超时,0.2代表接收数据的超时时间
    
    import requests
    response = requests.get('https://www.baidu.com',
                            timeout=0.0001)                                                    

    认证设置

      登陆网站时,弹出一个框,要求输入用户名密码(与alert很类似),此时是无法获取html的,但本质原理是拼接成请求头发送

    r.headers['Authorization']=_basic_auth_str(self.username,self.password)

      一般的网站都不用默认的加密方式,都是自己写,那么我们就需要按照网站的加密方式,自己写一个类似于_basic_auth_str的方法,得到机密字符串后添加到请求头

    r.headers['Authorization']=_func('.....')

      默认的加密方式

    import requests
    from requests.auth import HTTPBasicAuth
    r = requests.get('xxx',auth=HTTPBasicAuth('user','password'))
    print(r.status_code)

      HTTPBasicAuth可以简写为如下格式

    import requests
    r = requests.get('xxx',auth=('user','password'))
    print(r.status_code)

    异常处理

    import requests
    from requests.exceptions import *
    
    try:
        r = requests.get('http://www.baidu.com',timeout=0.00001)
    # except ReadTimeout:
    #     print('1111111111111111111111111111111111111111111readtimeout')
    # except Timeout:
    #     print('11111timeout')
    # except ConnectionError:
    #     print('ConnectionError')
    except RequestException:
        print('Error')

    上传文件

    import requests
    files = {'file':open('a.jpg','rb')}
    response = requests.post('http://httpbin.org/post',files=files)
    print(response.status_code)
  • 相关阅读:
    树莓派镜像拷贝
    zookeeper客户端Watcher管理
    设置ZooKeeper服务器地址列表源码解析及扩展
    利用zookeeper实现发布订阅模式
    maven依赖错误排查经验
    理解CMS GC日志
    深入分析ThreadLocal
    Fail-Fast分析
    Stream学习过程中遇到的一个问题记录
    ClassLoader 学习笔记
  • 原文地址:https://www.cnblogs.com/iamluoli/p/9262687.html
Copyright © 2020-2023  润新知