zoukankan      html  css  js  c++  java
  • 安装requests,requests基本使用

    安装requests;pip install requests

    发送请求

    import requests#导入requests模块
    r=requests.get("https://www.baidu.com/")#获取某个网页
    print(r)
    

     传递URL参数

    requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。(params应该是第2个参数,也可以使用位置参数方式来传值)

    打印出该URL;r.url

    读取服务器响应的内容;r.text

    请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests会使用其推测的文本编码,你可以找出Requests使用了什么编码,并且能够使用r.encoding属性来改变它。

    r.encoding='??'

     二进制响应内容 r.content

     你也能以字节的方式访问请求响应体,对于非文本请求;

     Requests会自动为你解码gzip和deflate传输编码的响应数据。

     JSON响应内容

    Requests中也有一个内置的JSON解码器,助你处理JSON数据;

     如果JSON解码失败,r.json()就会抛出一个异常。

    原始响应内容 r.raw

    请你确保在初始请求中设置了stream=True.

     定制请求头

    如果你想为请求添加HTTP头部,只要简单地传递一个dict给headers参数就可以了。

     注意:定制header的优先级低于某些特定的信息源。

     更加复杂的POST请求

    通常,你想要发送一些编码为表单形式的数据——非常像一个HTML表单。要实现这个,只需简单地传递一个字典data参数。你的数据字典在发出请求时会自动编码为表单形式。

     

     data参数传入一个元组列表。在表单中多个元素使用同一key的时候,这种方式尤其有效。

     很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个string而不是一个dict,那么数据会被直接发布出去。

    import requests
    import json
    url='https://api.github.com/some/endpoint'
    a={'some':'data'}
    #r=requests.post(url,data=json.dumps(a))#传递参数为string,
    r=requests.post(url,json=a)#使用json参数,会自动编码
    

    POST一个多部分编码(Multipart-Encoded)的文件

    Requests使得上传多部分编码文件变得很简单;

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

    import requests
    url='http://httpbin.org/post'
    a={'filess':('a.txt',open('a.txt','rb'),'application/vnd.ms-excel', {'Expires': '0'})}
    rs=requests.post(url,files=a)
    print(rs.text) 

    "files": {
    "filess": "hehe xixi gaga"
    },

    如果你想,你也可以发送作为文件来接收的字符串:

     响应状态码

    我们可以检测响应状态码

    为方便引用,Requests还附带了一个内置的状态码查询对象。

    如果发送了一个错误请求(一个4XX客户端错误,或者5XX服务器错误响应),我们可以通过Response.raise_for_status()来抛出异常;

    rs的status_code是200, 我们调用raise_for_status()时,得到的是None;

     响应头

    我们可以查看一个Python字典形式展示的服务器响应头;

    但是这个字典比较特殊,它是仅为HTTP头部而生的。根据 RFC 2616, HTTP 头部是大小写不敏感的。

    因此,我们可以使用任意大写形式来访问这些响应头字段:

    它还有一个特殊点,那就是服务器可以多次接受同一 header,每次都使用不同的值。但 Requests 会将它们合并,这样它们就可以用一个映射来表示出来

     Cookie

    如果某个响应中包含一些cookie,你可以快速访问他们;

     要想发送你的cookie到服务器,可以使用cookies参数;

     Cookie的返回对象为RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以吧Cookie Jar传到Requests中。

     重定向与请求历史

    默认情况下,除了HEAD,Requests会自动处理所有重定向。

    可以使用响应对象的history方法来追踪重定向。

    Response.history是一个Response对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。

    如果你使用的是GET、OPTIONS、POST 、PUT、PATCH或者DELETE,那么你可以通过allow_redirects参数禁用重定向处理;

     如果你使用了HEAD,你也可以启用重定向;

     超时

    你可以告诉requests在经过以timeout参数设定的描述事件之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:

    注意

    timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.

    错误与异常

    遇到网络问题(如:DNS查询失败、拒绝连接等)时,Requests会抛出一个ConnectionError异常。

    如果HTTP请求返回了不成功的状态码,Response.raise_for_status()会抛出一个HTTPError异常。

    若请求超时,则抛出一个Timeout异常。

    若请求超过了设定的最大重定向次数,则会抛出一个TooManyRedirects异常。

    所有Requests显示抛出的异常都继承自requests.exceptions.RequestException。

    参考:https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    jquery mobile (一)
    jquery mobile 前言
    MD5Helper辅助类
    设计权限管理系统(十四)
    设计权限管理系统(十三)
    display:table-cell的min-height
    CORS跨域cookie传递
    性能优化-合成层
    textarea自适应高度
    仿今日头条按钮loading效果
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13363702.html
Copyright © 2011-2022 走看看