• requests库基本使用


    请求

    基本GET请求

    基本写法

    import requests 
    
    response = requests.get(url='http://httpbin.org/get')
    
    print(response.text)
    
    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Connection": "close", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.6.0 CPython/2.7.12 Linux/2.6.32-504.30.3.el6.x86_64"
      }, 
      "origin": "123.207.159.116", 
      "url": "http://httpbin.org/get"
    }
    

    带参数GET请求

    response = requests.get(url='http://httpbin.org/get?name=yang&age=22')
    print(response.text)
    
    {
      "args": {
        "age": "22", 
        "name": "yang"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Connection": "close", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.6.0 CPython/2.7.12 Linux/2.6.32-504.30.3.el6.x86_64"
      }, 
      "origin": "123.207.159.116", 
      "url": "http://httpbin.org/get?name=yang&age=22"
    }
    
    data = {
        'name': 'yang',
        'age': '23',
    }
    
    response = requests.get(url='http://httpbin.org/get', params=data)
    print(response.text)
    
    {
      "args": {
        "age": "23", 
        "name": "yang"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Connection": "close", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.6.0 CPython/2.7.12 Linux/2.6.32-504.30.3.el6.x86_64"
      }, 
      "origin": "123.207.159.116", 
      "url": "http://httpbin.org/get?age=23&name=yang"
    }
    

    解析json

    response = requests.get(url='http://httpbin.org/get')
    response.json()
    
    # 调用json 方法和 json.loads(response.text) 结果相同
    
    {u'args': {},
     u'headers': {u'Accept': u'*/*',
      u'Accept-Encoding': u'gzip, deflate',
      u'Connection': u'close',
      u'Host': u'httpbin.org',
      u'User-Agent': u'python-requests/2.6.0 CPython/2.7.12 Linux/2.6.32-504.30.3.el6.x86_64'},
     u'origin': u'123.207.159.116',
     u'url': u'http://httpbin.org/get'}
    

    获取二进制数据, 可用来下载图片,视频等

    response = requests.get(url='https://github.com/favicon.ico')
    # print(type(response.text), type(response.content))
    
    # with open('/tmp/pic.ico', 'wb') as f:
    #     f.write(response.content)
        
    # print(response.text)
    # print(response.content)
    

    添加headers

    # headers 请根据实际情况添加
    headers = {
        'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G35 QQ/6.5.3.410 V1_IPH_SQ_6.5.3_1_APP_A Pixel/750 Core/UIWebView NetType/2G Mem/117",
    }
    
    response = requests.get('https://www.zhihu.com/explore', headers=headers)
    
    # print(response.text)
    
    

    基本POST请求

    data = {'name': 'yang', 'age': 23}
    
    response = requests.post('http://httpbin.org/post', data=data, headers=headers)
    print(response.text)
    
    
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "age": "23", 
        "name": "yang"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Connection": "close", 
        "Content-Length": "16", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "httpbin.org", 
        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G35 QQ/6.5.3.410 V1_IPH_SQ_6.5.3_1_APP_A Pixel/750 Core/UIWebView NetType/2G Mem/117"
      }, 
      "json": null, 
      "origin": "123.207.159.116", 
      "url": "http://httpbin.org/post"
    }
    

    响应

    常用respnse 属性

    # 此处的response只是本例中用的变量名称,可以依个人习惯或实际场景用其他变量名
    
    response.status_code   # 返回的状态码 
    response.headers       # headers 
    response.cookies       # 获取 cookie
    response.url           # 请求的url 
    response.history       # 访问历史记录 
    
    
    []
    

    高级操作

    文件上传

    file = {'file': open('/tmp/pic.ico', 'rb')}
    
    response = requests.post('http://httpbin.org/post', files=file)
    

    会话维持

    s = requests.Session() 
    s.get('http://httpbin.org/cookies/set/number/2132')
    response = s.get('http://httpbin.org/cookies')
    # print(response.status_code, response.cookies)
    
    
    

    证书验证

    '''
    # from requests.packages import urllib3
    # urllib3.disable.warnings()     # 取消警告信息
    response = requests.get('https://12306.cn', verify=False)   # verify=False 不进行证书验证
    
    # 指定证书 
    response = requests.get('https://12306.cn', cert=('/path/server.crt', '/path/key'))
    
    '''
                            
    
    "
    # from requests.packages import urllib3
    # urllib3.disable.warnings()     # xe5x8fx96xe6xb6x88xe8xadxa6xe5x91x8axe4xbfxa1xe6x81xaf
    response = requests.get('https://12306.cn', verify=False)   # verify=False xe4xb8x8dxe8xbfx9bxe8xa1x8cxe8xafx81xe4xb9xa6xe9xaax8cxe8xafx81
    
    # xe6x8cx87xe5xaex9axe8xafx81xe4xb9xa6 
    response = requests.get('https://12306.cn', cert=('/path/server.crt', '/path/key'))
    
    "
    

    代理设置

    proxies = {
        'http': 'http://127.0.0.1:9743',
        'https': 'https://127.0.0.1:9743',
        'http': 'http://user:password@127.0.0.1:9743/',
    }
    
    response = requests.get('https://wwww.taobao.com', proxies=proxies)
    

    socks代理

    # 安装 
    pip install requests[socks]
    
    proxies = {
        'http': 'socks5://127.0.0.1:9743',
        'https': 'socks4://127.0.0.1:9743',
    }
    
    response = requests.get('https://wwww.taobao.com', proxies=proxies)
    

    超时设置

    response = requests.get('http://www.gogole.com', timeout=10)
    

    认证设置

    from requests.auth import HTTPBasicAuth 
    
    r = requests.get('http://123.207.159.116:9001', auth=HTTPBasicAuth('userName', 'password'))
    # 或 
    r = requests.get('http://123.207.159.116:9001', auth=('userName', 'password'))
    
    

    异常处理

    from requests.exception import ReadTimeout, HTTPError, RequestException, ConnectionError
    
    try:
        r = requests.get('http://www.baidu.com', timeout=10)
        
    except ReadTimeout:
        print('ReadTimeout')
        
    except HTTPError:
        print('HTTPError')
        
    except RequestException:
        print('RequestException')    
        
    except ConnectionError:
        print('ConnectionError')   
    
  • 相关阅读:
    最小路径
    零钱兑换
    硬币
    三步问题
    区域和检索
    除数博弈
    URI和URL的辨别
    交叉编译OpenMP
    牛客挑战赛44D-数列的和
    CF1408H. Rainbow Triples
  • 原文地址:https://www.cnblogs.com/yangxiaolan/p/6850945.html
Copyright © 2020-2023  润新知