美文网首页
3. requests 请求库

3. requests 请求库

作者: 柄志 | 来源:发表于2018-08-23 15:35 被阅读0次

requests 请求库

requests库建立在urllib库的基础上,是一个处理HTTP请求的第三方库,最大的优点是程序编写的过程更接近正常URL访问过程。

基本用法

GET请求

  • requests.get()函数的参数url链接必须采用HTTP或HTTPS方式访问
  • 调用requests.get()函数后,返回一个Response对象代表响应

Response对象的属性(4个)

属性 描述
status_code HTTP请求的响应状态码
text HTTP响应内容的字符串形式
encoding HTTP响应内容的编码方式
content HTTP响应内容的二进制形式

Response对象的方法(2个)

方法 描述
json 解析HTTP响应内容包含的JSON格式数据(若有)
raise_for_status 如果响应状态码不是200,则产生异常
  • requests.get()函数可通过params参数构造URL以传递某些数据,数据以字符串字典的形式提供
  • requests.get()函数可通过timeout参数设定请求超时时间
import requests

headers = {
    'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
    }

r = requests.get('http://www.baidu.com',headers = headers) # 通过headers参数传递头信息(多用于避免被某些网页禁止抓取)

print(type(r)) # <class 'requests.models.Response'>
print(type(r.status_code)) # <class 'int'>
print(r.status_code) # 200(或404等)
print(r.encoding) # ISO-8859-1(或utf-8等)
print(type(r.text)) # <class 'str'>
print(r.text) # 响应内容的文本形式
print(type(r.content)) # <class 'bytes'>
print(r.content) # 响应内容的二进制形式(图片、音频和视频等文件可通过该方法获取) 

POST请求

import requests

url = 'https://httpbin.org/post'
data = {'key':'value'}
r = requests.post('url',data = data)
print(r.text) # 返回结果中from部分即为提交数据

响应

  • 除了使用text和content获取响应内容外,还有多种属性和方法可获得响应的其他信息
import requests

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
    }

params = {'wd':'requests'}

r = requests.get('https://www.baidu.com/s',headers = headers,params = params,timeout = 10)

print(type(r.cookies)) # <class 'requests.cookies.RequestsCookieJar'>
print(r.cookies) 
print(type(r.headers)) # <class 'requests.structures.CaseInsensitiveDict'>
print(r.headers) 
print(type(r.url)) # <class 'str'>
print(r.url) # https://www.baidu.com/s?wd=requests
print(type(r.history)) # <class 'list'>
print(r.history) # []

高级用法

文件上传

  • requests可模拟提数据
import requests

files = {'file':open('favion.ico','rb')}

r = requests.post('http://httpbin.org/post',files = files)
print(r.text) # 文件上传部分由files字段标识

Cookies

import requests

r = requests.get('https://www.baidu.com')
print(r.cookies)

headers = {
    'Cookie':'略',
    'Host':'www.baidu.com',
    'Upgrade-Insecure-Requests':'1',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
    }

# 将cookies设置到headers
q = requests.get('https://www.baidu.com')
print(q.text)
  • 通过r.cookies的方式获取Cookies
  • 将Cookies设置到Headers参数中发送请求
  • 也可通过cookies参数单独设置Cookies(需利用split()方法分割cookies,并利用set()方法设置每个cookies的key与value)

会话维持

  • 利用Session对象实现会话维持
  • Session对象可模拟在一个浏览器打开同一站点的不同页面,常用于模拟登陆成功后的下一步操作
import requests

url_1 = '……'
url_2 = '……'
# 同一站点的不同页面

s = requests.Session()
s.get(url_1)
r = s.get(url_2)

SSL证书验证

  • requests可以为 HTTPS 请求验证 SSL 证书
  • requests的SSL验证默认开启(verify参数默认为True)
  • 可通过verify参数传入可信任的CA证书文件的文件夹路径
  • 若证书验证失败,Requests会抛出SSLError
import requests

r = requests.get('https://www.12306.cn',verify=False)  # verify参数设置为False可避免SSLError,但会返回一个警告
print(r.status_code)

'''
Warning (from warnings module):
  File "C:\Users\CC\AppData\Local\Programs\Python\Python36\lib\site-packages\urllib3\connectionpool.py", line 858
    InsecureRequestWarning)
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
'''

代理设置

  • 可通proxies参数过为任意请求方法配置单个请求
  • 若代理需使用HTTP Basic Auth,可用 http://user:password@host语法
  • 为某个特定的连接方式或主机设置代理,使用scheme://hostname作为key,从而针对指定的连接方式或主机进行匹配
import requests

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

'''
代理使用HTTP Basic Auth
proxies = {
        'http': 'http://user:pass@10.10.1.10:3128/',
        }
        
针对指定的连接方式或主机设置代理        
proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'} 
'''

requests.get("http://example.org", proxies=proxies)

超时设置

  • 为了防止服务器不能及时响应,可设置一个超时时间,超过该时间未响应即报错
  • requests通过timeout参数进行超时设置,默认为None(永久等待)
  • timeout值将会用作connect和read二者的timeout,如需分别制定则传入一个元组
import requests

r = requests.get('https://github.com', timeout=5)
q = requests.get('https://github.com', timeout=(3.05, 25))  # 分别制定connect和read二者的timeout

身份验证

  • requests提供HTTPBasicAuth类进行身份验证
  • 身份验证时可直接传入一个包含username和passport的元组,它会默认使用HTTPBasicAuth类进行身份验证
  • 验证成功返回200状态码,验证失败则返回401状态码
import requests

url = '……'
r = requests.get(url,auth=('username','password'))
print(r.status_code)  #200或401

相关文章

  • 3. requests 请求库

    requests 请求库 requests库建立在urllib库的基础上,是一个处理HTTP请求的第三方库,最大的...

  • 01_依赖库的安装

    请求库的安装 requests:阻塞式http请求库$ pip install requests selenium...

  • Python Requests库用法

    Requests库 Requests库是Python中提供HTTP请求的库,基于urllib。 GET请求 req...

  • python接口测试

    一、requests库二、pandas库三、接口示例 前言本文档讲述使用python requests库请求接口、...

  • request库爬取网页源代码

    # 导入requests请求库 import requests as y # 网址 url ="http://ww...

  • 人生苦短之HTTP协议及Requests库的方法

    requests库的主要方法:requests.request()构造一个请求    requests.get()...

  • Requests

    Requests库 目录一、Requests基础二、发送请求与接收响应(基本GET请求)三、发送请求与接收响应(基...

  • requests库

    导入模块 使用requests库之前需要先导入模块。 发送请求 requests模块发出get请求,即可获取整个网...

  • 19-01-09requests

    import requests python中的数据请求(http请求),是第三方库requests来提供的 1....

  • 数据请求

    import requests python中的数据请求(http请求),是第三方库requests来提供的 1....

网友评论

      本文标题:3. requests 请求库

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