• 周六. 7 月 27th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

请求库之requests库

admin

11 月 28, 2021

request 模块基本使用

安装

pip install requests

1.发送http请求

# get,delete,post 本质都是调用request函数
ret = requests.get('http://www.baidu.com')
print(ret.status_code) # 响应状态码
print(ret.text) # 响应体,转成了字符串
print(ret.content) # 响应体,二进制,比如图片视频
ret = requests.post('https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3')

2. get请求带参数


# 方式一
response=requests.get('http://127.0.0.1:8000/?name=bh',
                      headers={
                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
                        'cookie':'islogin=xxx;key2=value'
                      })
print(response.text)

# 方式二(推荐) 中文会自动转码
ret = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
                   cookies={'islogin':'xxx'})
print(ret.text)

3.发送post请求(注册,登录) 携带数据(body)

# data=None,json=None
# data:urlencoded编码
ret = requests.post('http://127.0.0.1:8000/',data={'name':'hank','age':18})

# json:json编码
import json
data = json.dumps({'name':'hank','age':18})
ret = requests.post('http://127.0.0.1:8000/',data=data)
print(ret)
# 注意:编码格式是请求头中带的,所有可以在headers中手动修改

4.session对象

session=requests.session()
# 跟requests.get/post用起来完全一样,但是它处理了cookie
# 假设是一个登陆,并且成功
session.post()
# 再向该网站发请求,就是登陆状态,不需要手动携带cookie
session.get("地址")

5.响应对象

print(response.text)   # 响应体转成str
print(response.content) # 响应体二进制(图片,视频)

print(response.status_code) # 响应状态码
print(response.headers) # 响应头
print(response.cookies) # 服务端返回的cookie
print(response.cookies.get_dict()) # 转成字典
print(response.cookies.items())

print(response.url)  # 当次请求的地址
print(response.history) # 如果有重定向,将重定向的地址放到一个列表中

print(response.encoding) # 编码方式

response.iter_content() # 视频,图片迭代取值
with open("a.mp4",'wb') as f:
    for line in response.iter_content():
        f.write(line)

6.乱码问题

# 加载回来的页面,打印出来乱码(我们用的是utf8编码),如果网站用gbk,
ret.encoding='gbk'

ret=requests.get('http://127.0.0.1:8000/user')
# # ret.apparent_encoding拿到当前页面的编码
ret.encoding=ret.apparent_encoding

7.解析json

et = requests.get('http://127.0.0.1:8000/')
print(type(ret.text))
print(ret.text)

a=ret.json()
print(a['name'])
print(type(a))

8.使用代理

# 正向代理
# django如何拿到客户端ip地址 META.get("REMOTE_ADDR")
ret=requests.get('http://127.0.0.1:8000/',proxies={'http':'地址'})
print(type(ret.text))
print(ret.text)


## 代理
# 网上会有免费代理,不稳定

# 使用代理有什么用?
# drf:1分钟只能访问6次,限制ip
# 每次发请求都使用不同代理,random一下
# 代理池:列表,其实就是代理池的一种
import requests
ret=requests.get('https://www.cnblogs.com/',proxies={'http':'222.85.28.130:40505'})
print(ret.text)

#高匿:服务端,根本不知道我是谁
#普通:服务端是能够知道我的ip的
# http请求头中:X-Forwarded-For:代理的过程
ret=requests.get('http://101.133.225.166:8080',proxies={'http':'114.99.54.65:8118'})
print(ret.text)

9.上传文件

file={'myfile':open('1.txt','rb')}
ret =requests.post('http://127.0.0.1:8000/',files=file)
print(ret.content)

 requests库的十三个参数

  • params:字典或字节序列,作为参数增加到链接中
  • data:字典,字节序列或文件对象,作为请求的内容
  • json:JSON格式的数据,作为Request的内容
  • headers:字典,HTTP定制头(模拟浏览器进行访问)
  • cookies:字典或CpplieJar,Request中的cookie
  • auth:元祖,支持HTTP认证功能
  • files:字典类型,传输文件
  • timeout:设定超时时间,秒为单位
  • proxies:字典类型,设定访问代理服务器,可以增加登陆认证
  • allow_redirects:True//False,默认为True,重定向开关
  • stream:True/False,默认为True,获取内容立即下载开关
  • verify:True/False,默认为True,认证SSL证书开关
  • cert:本地SSL证书路径

发表回复