Python__requests模块的基本使用
2024-09-02 11:58:55
1 - 安装和导入
pip install requests
import requests
2 - requsts的请求方法
requests.get('https://www.baidu.com/') # GET请求: 请求获取url位置的资源
requests.post('https://www.baidu.com/') # POST请求: 请求向url位置的资源后附加新的数据
requests.put('https://www.baidu.com/') # PUT请求: 请求向url位置存储一个资源,覆盖该位置的原有资源
requests.delete('https://www.baidu.com/') # DELETE请求: 请求删除url位置存储的资源
requests.head('https://www.baidu.com/') # HEAD请求: 请求获取url位置的资源的头部信息
requests.patch('https://www.baidu.com/') # PATCH请求: 请求局部更新url位置的资源
requests.options('https://www.baidu.com/') # OPTIONS请求: 测试服务器是否真的接受请求数据
requests.request() # 构造一个请求,适用于以下的各种请求方法
requests.request(method,url,**kwargs)
# method:请求方式,对应get/put/post等7种
# url:拟获取页面的url链接
# **kwargs:控制访问的参数,共13个
3 - 为url传递参数
(1)get方法传参
url_params = {'key':'value'}
r = requests.get('your url',params = url_params) # 相当于your url?key=value
(2)post方法传参
使用data参数接受字典参数,request会自动将字典转换成json的请求体数据
4 - 请求的响应结果
r = requests.get('your url',params = url_params)
r.encoding # 获取当前的编码
r.encoding = 'utf-8' # 设置编码
r.apparent.encoding # 从内容中分析出的响应内容编码方式(备选编码方式)
r.status_code # 响应状态码
r.raw # 返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok # 查看r.ok的布尔值便可以知道是否登陆成功
r.raise_for_status() # 失败请求(非200响应)抛出异常
r.text # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.content # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.json() # Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
5 - post发送json请求
r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'}))
print(r.json())
6 - 定制头和cookie信息
header = {'user-agent': 'xxxxxxxxxxxxxxx'}
cookie = {'key':'value'}
r = requests.get/post('url',headers=header,cookies=cookie)
data = {'some': 'data'}
headers = {'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'} r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)
print(r.text)
7 - 超时
r = requests.get('url',timeout=1) #设置秒数超时,仅对于连接有效
8 - 会话对象,能够跨请求保持某些参数
s = requests.Session()
s.auth = ('auth','passwd')
s.headers = {'key':'value'}
r = s.get('url')
r1 = s.get('url1')
9 - 代理
proxies = {'http':'ip1','https':'ip2' }
requests.get('url',proxies=proxies)
#设置访问代理
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.100:4444",
}
r = requests.get('http://m.ctrip.com', proxies=proxies) #如果代理需要用户名和密码,则需要这样:
proxies = {
"http": "http://user:pass@10.10.1.10:3128/",
}
10 - 异常处理
import requests URL = 'http://ip.taobao.com/service/getIpInfo.php' # 淘宝IP地址库API
try:
r = requests.get(URL, params={'ip': '8.8.8.8'}, timeout=1)
r.raise_for_status() # 如果响应状态码不是 200,就主动抛出异常
except requests.RequestException as e:
print(e)
else:
result = r.json()
print(type(result), result, sep='\n')
11 - 上传文件
import requests url = 'http://127.0.0.1:8080/upload'
files = {'file': open('/home/rxf/test.jpg', 'rb')}
#files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))} #显式的设置文件名 r = requests.post(url, files=files)
print(r.text)
#request更加方便的是,可以把字符串当作文件进行上传:
import requests
url = 'http://127.0.0.1:8080/upload'
files = {'file': ('test.txt', b'Hello Requests.')} #必需显式的设置文件名 r = requests.post(url, files=files)
print(r.text)
12 - 身份验证
基本身份认证(HTTP Basic Auth) import requests
from requests.auth import HTTPBasicAuth r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd'))
# r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd')) # 简写
print(r.json()) -----------------------------------------------------------------------
另一种非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的:
requests.get(URL, auth=HTTPDigestAuth('user', 'pass')
13 - 示例
import requests # '''requests模块抓取网页源码并保存到文件示例'''
html = requests.get("http://www.baidu.com")
with open('test.txt', 'w', encoding='utf-8') as f:
f.write(html.text)
最新文章
- appium for iOS config
- linux网络:常用命令(一)
- 20150604_Andriod 窗体PopupWindow动画
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- 动态加载故事storyboard
- jquery 获取点击事件的id;jquery如何获取当前触发事件的控件ID值
- codeforces 633D - Fibonacci-ish 离散化 + 二分查询
- bluetooth-蓝牙事件监听
- oracle11g的dmp文件导入oracle10g当误差:头验证失败---解决
- Special Fish
- java —— equals 与 ==
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T1(找规律)
- edram install
- How to install Redis 3.2 on CentOS 6 and 7
- Android动态的全屏和退出全屏
- 五大常见的MySQL高可用方案【转】
- Nginx 反向代理、后端检测模块
- 全球数据库-->;基金/管理产品-->;分类/行业平均
- 【bzoj3456】 城市规划
- 【51nod】1227 平均最小公倍数
热门文章
- phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433)
- Django <; 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
- 创建函数function
- 群晖NAS网络存储服务器防盗防小偷
- 痞子衡嵌入式:ARM Cortex-M内核那些事(9.1)- 存储保护(MPU - PMSAv6/7)
- Java面向对象10——方法重写
- .NET Core/.NET5/.NET6 开源项目汇总12:WPF组件库2
- HandlerInterceptor与WebRequestInterceptor的异同
- 计算机毕业设计项目-基于SSM的学生会管理系统-基于ssm的社团信息管理系统
- 零基础学Java之Java学习笔记(四):运算符