美文网首页
requests的快速入门

requests的快速入门

作者: MoonMonsterss | 来源:发表于2018-10-21 19:02 被阅读13次

    1.安装

    pip install requests

    2.导入

    import requests

    3.常用函数

    requests.post('http://httpbin.org/post', data = {'key':'value'})
    requests.put('http://httpbin.org/put', data = {'key':'value'})
    requests.delete('http://httpbin.org/delete')
    requests.head('http://httpbin.org/get')
    requests.options('http://httpbin.org/get')
    

    4.给url添加参数

    会以键值对的方式跟在 ? 后面,例如httpbin.org/get?key=val
    Requests可以使用params关键字参数来传递url参数,以一个字符串字典来提供参数

    params = {'key':'value'}
    r = requests.get('http://httpbin.org/get',params=params)
    # url: http://httpbin.org/get?key=value
    

    或者一个key值对应多个value值

    payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
    r = requests.get('http://httpbin.org/get', params=payload)
    # url: http://httpbin.org/get?key1=value1&key2=value2&key2=value3
    

    5.响应内容

    r.text可以获取到返回的内容
    r.encoding获取返回的编码类型,也可以自己手动更改编码,那么在之后的请求中,都将使用encoding的新的值

    二进制响应内容
    r.content 对于非文本的请求,可以字节的形式请求响应体,Requests会自动解码gzip和deflate传输编码的响应数据

    保存一张图片,图片在传输过程中是以字节的形式存在,在保存时使用r.content写入到文件中

    r = requests.get('http://img.zcool.cn/community/0117e2571b8b246ac72538120dd8a4.jpg@1280w_1l_2o_100sh.jpg')
    with open('fp.jpg','wb') as img:
        img.write(r.content)
    

    json响应内容
    r.json() 内置的JSON解码器,处理json数据
    json数据解析失败时会抛出异常;json数据解析成功也并不代表响应成功,有可能返回的错误数据就是json格式的
    判断是否响应成功,使用r.raise_for_status()或者r.status_code判断

    原始响应内容
    r.raw 获取来自服务器的原始套接字响应,同时需要设置stream=True

    r = requests.get('http://httpbin.org',stream=True)
    print(r.raw.read()) # read会读取所有的数据,可以传入int参数
    print(r.text)
    

    定制请求头
    传递一个dict数据给headers参数
    所有的headers必须是string,tytestring或者unicode类型

    headers = {'user-agent':'test-app'}
    r = requests.get('http://httpbin.org/get',headers=headers)
    

    6.复杂的POST请求

    发送一些编码为表单的数据,只需要传递dict给data参数,在请求时会自动编码为表单形式

    payload = {'key1': 'value1', 'key2': 'value2'}
    payload = (('key1', 'value1'), ('key1', 'value2'))
    r = requests.post('http://httpbin.org/post', data=payload)
    数据:"form": {
            "key": "value"
        }
    

    如果想发送出去的数据就是string类型,而不是form表单数据的话,可以这么做

    params = {'key':'value'}
    r = requests.post('http://httpbin.org/post',data=json.dumps(params))
    数据: "json": {
            "key": "value"
        } 
    

    也可以直接使用json参数传递,不需要dumps了

    requests.post(url, json=payload)
    

    7.POST发送文件

    url = 'http://httpbin.org/post'
    files = {'file': open('report.xls', 'rb')}
    r = requests.post(url, files=files)
    

    可以显式地设置文件名,文件类型和请求头

        files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
    

    也可以将字符串当做文件来发送

    files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
    

    8.Cookie

    从cookie中获取值

    r.cookies['example_cookie_name']
    

    发送cookie到服务器

    cookies = dict(cookies_are='working')
    r = requests.get('http://httpbin.org/cookies',cookies=cookies)
    

    Cookie的返回对象是RequestsCookieJar,行为和dict类似,适合跨域名跨路径使用

    jar = requests.cookies.RequestsCookieJar()
    jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
    jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
    url = 'http://httpbin.org/cookies'
    r = requests.get(url, cookies=jar)
    

    9.超时

    在请求可以传入timeout参数,设置指定时间后,如果没有请求成功,则停止响应
    timeout只对连接有效,与响应体的下载无关
    timeout并不是整个下载响应的时间限制,而是服务器在timeout秒内没有应答
    requests.get('http://github.com', timeout=0.001)

    10.错误与异常

    网络问题(DNS查询失败,拒绝连接等),抛出ConnectionError异常
    返回不成功的状态码,Response.raise_for_status()抛出一个HTTPError异常
    请求超时,抛出Timeout异常
    请求超过设定的最大重定向次数,抛出一个TooManyRedirects异常

    相关文章

      网友评论

          本文标题:requests的快速入门

          本文链接:https://www.haomeiwen.com/subject/rttizftx.html