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

    1、发送HTTP请求,可以带参数或不带
    import requests
    r=requests.get(url,params,kwargs)
    r=requests.post(url,data,json,kwargs)

    2、响应对象的获取
    Response.text:获取响应正文文本内容
    Response.content:获取响应正文的二进制字节内容
    Response.json();获取响应正文的json串,并对其进行json decode操作,返回一个字典
    Response.status_code:获取响应的状态码
    Response.raise_for_status():如果响应状态是40X或50X,可以使用此方法抛出一下异常
    Response.headers:获得响应结果的头部相关信息
    r.raw :返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取

    3、发请求时,可以传入修改的请求头,如
    headers = {'Accept':'text/html,application/xhtml/+xml,application/xml;',
    'Accept-Encoding':'gzip',
    'Accept-Language':'zh-CN,zh;q=0.8',
    'Referer':'http://www.example.com',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chorme/42.0.2311.90 Safari/537.36'
    }
    res1 = requests.post(url1, data=data, headers=headers)

    4、发送post请求
    application/x-www-form-urlencoded
    最常见post提交数据的方式,以form表单形式提交数据。
    application/json
    以json串提交数据。
    multipart/form-data
    一般使用来上传文件。

    4.1以表单形式发送请求,只需将请求的参数构造成一个字典传给data参数即可
    url='http://httpbin.org/post'
    d={'key1':'value1','key2':'value2'}
    r=requests.post(url,data=d)

    4.2以json格式发送请求,将一个json串传给data参数即可
    像urllib和urllib2,如果用到json,就要引入新模块,如json和simplejson,但在requests中已经有了内置的函数,r.json()。
    就拿查询IP的API来说
    import requests
    #import json ???
    url='http://httpbin.org/post'
    s=json.dumps({'key1':'value1','key2':'value2'})
    r=requests.post(url,data=s)

    4.3以multipart形式发送post请求,将一个文件传给files参数即可
    url='http://httpbin.org/post'
    files={'file':open('123.txt','rb')}
    #files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))} #显式的设置文件名
    r=request.post(url,files=files)

    拓展:
    更加方便的是,你可以把字符串当着文件进行上传:
    复制代码
    import requests

    url = 'http://127.0.0.1:5000/upload'
    files = {'file': ('test.txt', b'Hello Requests.')} #必需显式的设置文件名

    r = requests.post(url, files=files)
    print(r.text)

    5、Cookie设置

    5.1获取响应的cookies
    Response.cookies

    5.2发送带cookies的请求,将cookies字典传给参数cookies即可
    url='http://httpbin.org/post'
    cookies={'cookies_are':'working'}
    r=requests.get(url,cookies=cookies)

    5.3请求的超时设置,只需在post方法的timeout参数设置一个值即可,timeout 仅对连接过程有效,与响应体的下载无关
    url='http://httpbin.org/get'
    r=requests.get(url,timeout=0.001)

    6、异常
    ConnectionError
    由于网络原因,无法建立连接。
    HTTPError
    如果响应的状态码不为200,Response.raise_for_status()会抛出HTTPError 异常。
    Timeout
    超时异常。
    TooManyRedirects
    若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

    7、身份验证

    基本身份认证(HTTP Basic Auth):
    import requests
    from requests.auth import HTTPBasicAuth

    r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd'))
    # r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd')) # 简写print(r.json())
    另一种非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的:
    requests.get(URL, auth=HTTPDigestAuth('user', 'pass'))



    8、 代理访问

    采集时为避免被封IP,经常会使用代理。requests也有相应的proxies属性。
    import requests

    proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:1080",
    }

    requests.get("http://www.zhidaow.com", proxies=proxies)
    如果代理需要账户和密码,则需这样:
    proxies = {
    "http": "http://user:pass@10.10.1.10:3128/",
    }

    9、Cookies与会话对象

    如果某个响应中包含一些Cookie,你可以快速访问它们:
    import requests

    r = requests.get('http://www.google.com.hk/')
    print(r.cookies['NID'])
    print(tuple(r.cookies))
    要想发送你的cookies到服务器,可以使用 cookies 参数:
    复制代码
    import requests

    url = 'http://httpbin.org/cookies'
    cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}
    # 在Cookie Version 0中规定空格、方括号、圆括号、等于号、逗号、双引号、斜杠、问号、@,冒号,分号等特殊符号都不能作为Cookie的内容。
    r = requests.get(url, cookies=cookies)
    print(r.json())
    复制代码
    会话对象让你能够跨请求保持某些参数,最方便的是在同一个Session实例发出的所有请求之间保持cookies,且这些都是自动处理的,甚是方便。
    下面就来一个真正的实例,如下是快盘签到脚本:
    复制代码
    import requests

    headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, compress',
    'Accept-Language': 'en-us;q=0.5,en;q=0.3',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}

    s = requests.Session()
    s.headers.update(headers)
    # s.auth = ('superuser', '123')
    s.get('https://www.kuaipan.cn/account_login.htm')

    _URL = 'http://www.kuaipan.cn/index.php'
    s.post(_URL, params={'ac':'account', 'op':'login'},
    data={'username':'****@foxmail.com', 'userpwd':'********', 'isajax':'yes'})
    r = s.get(_URL, params={'ac':'zone', 'op':'taskdetail'})
    print(r.json())
    s.get(_URL, params={'ac':'common', 'op':'usersign'})
  • 相关阅读:
    今日总结
    每日总结
    每日总结
    每日总结
    重返现世
    [PKUWC2018]随机游走
    [HAOI2015]按位或
    [NOI2020] 超现实树
    [NOI2017] 游戏
    [CSACADEMY]Card Groups
  • 原文地址:https://www.cnblogs.com/quyong/p/8534121.html
Copyright © 2011-2022 走看看