欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python-requests模块

程序员文章站 2022-04-09 17:09:43
requests模块 一、发送请求 向某个 发送get请求 发送一个post请求 发送其他类型的请求也都可以 二、传递url参数 get请求传递参数 post请求传递参数 三、响应内容 获取响应的内容 二进制响应内容 json响应内容 四、指定请求头 五、复杂的post请求 传递类似html表单的数 ......

requests模块

一、发送请求

  • 向某个url发送get请求

    requests.get("https://www.baidu.com")
  • 发送一个post请求

    requests.post("https://www.baidu.com",data={"name":"zhuyu"})
  • 发送其他类型的请求也都可以

二、传递url参数

  • get请求传递参数

    arg = {"name":"zhuyu","password":"123"}
    requests.get("www.baidu.com",params=ars)
  • post请求传递参数

    data = {"key":"value"}
    requests.post("www.baidu.com",data=data)

三、响应内容

  • 获取响应的内容

    response = requests.get("www.baidu.com")
    html = response.text  # html就是网站的源码
    url = response.url    # 请求的url
  • 二进制响应内容

    response.content       # 返回的是二进制数据
  • json响应内容

    response.json          
    # 如果响应的是json格式,它会自动帮你处理json数据,如果不能转换的话,会抛出异常
    # 注意有的服务器在失败的响应也会返回json对象,请使用raise_for_status()或者status_code进行校验

四、指定请求头

url = "www.baidu.com"
headers = {
    "user-agent":"xixi"
}
response = requests.get(url=url,headers=headers)

五、复杂的post请求

  • 传递类似html表单的数据

    url = "www.baidu,com"
    data = {"name":"zhuyu"}
    requests.post(url=url,data=data)
  • 传递json格式数据

    import json
    url = "www.baidu,com"
    data = {"name":"zhuyu"}
    # 方式一:
    requests.post(url=url,data=json.dumps(data))
    # 方式二:
    requests.post(url=url,json=data)

六、上传文件

url = "www.baidu,com"
files = {"file":open("a.txt","rb")}
requests.post(url=url,files=files)

七、响应状态码

response = requests.get("www.baidu.com")
status_code = response.status_code  # 获取状态码

# 如果返回一个400,500的状态码,可以通过raise_for_status()来抛出异常

八、响应头

response.headers     # 这是响应的头部信息

九、cookie信息

  • 获取响应头的cookie信息

    cookie = response.cookie   #获取到cookie的字典
  • 为requests设置cookie信息

    # cookie它是requestscookiejar的对象
    cookies = requests.cookoes.requestscookiejar()
    cookies.set("name","zhuyu")
    cookies.set("password":"123")
    requests.get(url,cookies=cookies)

十、重定向与请求历史

  • history方法

    这是response对象里的一个方法或者属性,它是一个对象列表,按照从最老到最近的请求进行排序的
  • allow_redirects参数,模式为true的

    response = requests.get(url=url,allow_redirects=false)
    # 上面代码是禁止了重定向

十一、超时

你可以告诉reuqests在经过timeout参数设定的秒数时间之后停止等待响应

requests.get(url=url,timeout=5)

十二、错误与异常

错误 异常
遇到网络问题 requests会抛出connectionerror异常
返回了不成功的状态码 response会抛出raise_fir_status异常
请求超时 抛出timeout异常
若请求超过了设定的最大重定向次数 抛出toomanyredirects异常

十三、会话对象

会话对象让你在能够跨请求保持某些参数

# 拿到一个会话对象,这个会话同样能实现requests中的方法
session = requests.session()
# 通过会话对象发送一个get请求到url
session.get(url=url)

------------------------------------------------------
# 会话也可用来为请求方法提供数据
session = requests.session()
session.headers.update({"name":"zhuyu"})
session.get(url,headers={"age":22})
# 此时在本次请求的请求中有name:"zhuyu"&age:22,这两对键值对

------------------------------------------------------
# 上面这个只是在会话层面,如果在方法层面呢?参数是不会被跨请求保持的
session = requests.session()
session.get(url=url,cookies={"name":"zhuyu"})
# 此时发送的get请求是带上"name"="zhuyu"这是cookie的
# 下面还是同一个session对象,我再发一个get请求,此时我没有写cookies这个参数
session.get(url=url)
# 结果:你会发现本次请求没有带上cookie

十四、请求与响应对象

response = requests.get(url=url)
# 列举下这行代码做了那几步
# 1、生成了一个request的对象,里面包含着所携带的数据,将该对象发送到某个服务器去请求
# 2、一旦响应之后,就会产生一个response的对象,这个对象包含着服务器传来的数据
# 3、最后将这个response对象赋值给了response这个变量
------------------------------------------------------------------------
response.headers # 就是响应的请求头
response.request.headers  # 就是请求的请求头

十五、准备的请求(prepared request)

import requests
response = requests.get(url)
# 其实请求最终还是以session对象发送的,
session.send(request对象,**kwargs)

-------------------------------------
from requests import request,session

session = session()

req = request("get",url)

request=preparedrequest(req)
# 官方文档说,我们可以在session对象send之前,对preparedrequest对象再进行一些操作

response = session.send(request,
                       stream=strean,
                       verify=verify,
                       proxies=proxies,
                       cert=cert,
                       timeout=timeout)
print (response.status_code)

十六、ssl证书验证(verify)

requests可以为https请求验证ssl证书,ssl验证默认是开启的,验证失败的话会抛出sslerror异常

# 设置证书路径
# 方式一:
request.get(url=url,verify=路径)
# 方式二:
session = requests.session()
session.verify = 路径

# verify对应:ssl证书路径

十七、客户端证书(cret)

# cert :指定证书的路径
requests.get(url=url,cert=路径)

session = requests.session()
session.cert = 路径

十八、ca证书

requests默认附带了一套它信任的证书,如果系统中装了certifi包,requests会试图使用它里面的证书,这样用户就不需要在修改代码的情况下更新他们信任的证书,所以我们经常更新certifi包

十九、响应体内容工作流

# stream:控制响应体内容的下载
response = requests.get(url,stream=true)

二十、流式上传(stream)

# requests可以上传文件
with open("a.txt","rb") as f:
    requests.post(url,data=f)
    
# 注意:传送的数据也就是文件,应该是一个文件对象
# 强烈建议建议使用二进制

二十一、post上传多个分块编码的文件

files = []

二十二、事件挂钩(hooks)

'''
可用的钩子:response,从一个请求产生的响应
用法:传递一个字典给hooks这个变量 {hook_name:callback_function}
这个callback_function会接收一个数据块作为它的第一个参数
hooks = dict(response=print_url)
'''
def print_url(response,*args,**kwargs):
    pass

二十三、代理(proxies)

import requests
proxies = {
    "http":"http://10.10.1.10:3128",
    "https":"https://10.10.1.10:1080"
}
response = requests.get(url=url,proxies=proxies)