目录
requests模块
模块说明
requests是使用Apache2 licensed许可证的HTTP库。
用python编写。
比urllib2模块更简洁。
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应的编码,支持国际化的URL和POST数据自动编码。
内置模块的基础上进行了高度的封装,从而使python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。
现代,国际化,友好。
requests会自动实现持久连接keep-alive。
速查
HTTP方法
requests模块都支持哪些方法呢?见下。
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEDA | 获得响应报文首部 |
DELETE | 删除文件 |
OPTIONS | 查询支持的方法 |
TRACK | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
LINK | 建立呵资源之间的连接 |
UNLINK | 断开连接 |
requests 模块中的http方法
如果我们想使用上面那些方法,我们在python里面怎么使用呢?见下。
res = requests.get() 发送get请求 res就是response响应 |
res = requests.post() |
res = requests.put() |
res = requests.delete() |
res = requests.head() |
res = requests.options() |
参数
GET参数 | params |
HTTP头部 | headers |
POST参数 | data |
文件 | files |
Cookies | cookies |
重定向处理 | allow_redirects = False/True |
超时 | timeout |
证书验证 | verify = False/True |
工作流(延迟下载) | stream = False/True |
事件挂钩 | hooks = dict(response=) |
身份验证 | auth = |
代理 | proxies = |
对象方法
URL | .url |
text | .text |
编码 | .excoding|.encoding= |
响应内容 | .content |
Json 解码器 | .json |
原始套接字响应 | .raw|.raw.read() |
历史响应代码 | .history |
抛出异常 | .raise_for_status() |
查看服务器响应头 | .headers |
查看客户端请求头 | .request.headers |
查看Cookie | .cookies |
身份验证 | .auth= |
更新 | .update |
解析连接字头 | .links[] |
模块入门
导入模块
import requests
测试:我们发送的http请求:
发送简洁请求
发送get 请求
res = requests.get("http://192.168.1.200/php/get.php")
会把所有的get请求放到res这个变量里面去,会把请求得到的响应的所有内容全放到res这个对象中去,然后通过这个res去获取正文
相关方法
获取响应正文
res.txt
获取响应状态码
res.status_code
获取响应编码
res.encoding
以二进制方式获取相应正文
res.content
获取响应头
res.headers
获取提交的URL(包括GET 参数)
res.url
获取发送到服务器的头信息
res.request.headers
例如:
----------get.php
<?php
var_dump($_GET);
?>
----------------------
-------------------
>>> import requests
>>> res = requests.get("http://192.168.1.200/php/get.php")
>>> res.text
'array(0) {\n}\n'
>>> res.status_code
200
>>> res.encoding
'ISO-8859-1'
>>> res.content
b'array(0) {\n}\n'
>>> res.headers
{'Date': 'Thu, 14 May 2020 00:57:37 GMT', 'Server': 'Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45', 'X-Powered-By': 'PHP/5.4.45', 'Content-Length': '13', 'Keep-Alive': 'timeout=5, max=100', 'Connection': 'Keep-Alive', 'Content-Type': 'text/html'}
>>> res.request.headers
{'User-Agent': 'python-requests/2.23.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
>>> res.url
'http://192.168.1.200/php/get.php'
>>>
------------------
相关操作
定制头部
@ 就是重新定义User-Agent信息
import requests #导入requests模块
url = "http://192.168.3.135/pytest/get.php" #请求的链接
header = {"User-Agent":"Waffle"} #重新定义HTTP头部
res = requests.get(url=url,headers=header) #res就是去发送这样一个请求 (等号前面的url是requests一个GET方法里面的参数,等号后面的url是请求的链接。header是我们定义的字典,headers是get方法的一个参数)
print(res.request.headers) # res是响应(响应的原来这个请求的头部信息)
超时
-----timeout.php---
---------------------------
import requests
url="http://192.168.3.135/pytest/timeout.php"
try:
res=requests.get(url=url,timeout=3)
print(res.text)
except Exception as e:
print("TimeOut!")
GET 传参
import requests
url="http://192.168.3.135/pytest/get.php"
getPara={"name":"Waffle","pwd":"123456"} #我们为了统一,所有的参数都放在字典里面
res=requests.get(url=url,params=getPara)
print(res.text)
print(res.url)
POST 传参
import requests
url="http://192.168.3.135/pytest/post.php"
postData={"name":"Waffle","pwd":"123456"}
res=requests.post(url=url,data=postData)
print(res.text)
上传文件
----------upfile.php
<html>
<meta charset="utf-8">
<h1>
文件上传测试
</h1>
<form
action=""
method="post"
enctype="multipart/form-data"
>
<input type="file" name="userUpFile">
<input type="submit" name="userSubmit" value="上传">
</form>
</html>
<hr />
<?php
echo "<pre>";
if(isset($_POST['userSubmit'])){
var_dump($_FILES);
$tmp_path=$_FILES['userUpFile']['tmp_name'];
$path=__DIR__."\\".$_FILES['userUpFile']['name'];//__DIR__获取当前php脚本所在目录
//echo $path;
if(move_uploaded_file($tmp_path,$path)){
//move_uploaded_file(参数1,参数2);将上传上来的缓存文件的目录(参数1)保存到参数2目录下
echo "upfile success!";
echo "<br />".$_FILES['userUpFile']['name'];
}else{
echo "upfile failed";
}
}
?>
---------------------------------
import requests
url="http://192.168.3.135/pytest/upfile.php"
upFile={"userUpFile":open("E:\pass.txt","rb")} #open的路径是我本地的路径,冒号前面是文件上传那个表单,input标签的名字
postData={"userSubmit":"submit"} #userSubmit是那个表单按钮的值
res=requests.post(url=url,files=upFile,data=postData)
print(res.text)
重定向
------redirect.php
<?php
header('location:./get.php');
echo "This is redirect.php!";
?>
---------------------------
import requests
url = "http://192.168.1.200/php/redirect.php"
res = requests.get(url=url)
print(res.text)
print(res.history)
print('\n')
res = requests.get(url=url,allow_redirects=False)
print(res.headers)
print(res.text)
---------
array(0) {
}
[<Response [302]>]
{'Date': 'Thu, 14 May 2020 09:02:34 GMT', 'Server': 'Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45', 'X-Powered-By': 'PHP/5.4.45', 'location': './get.php', 'Content-Length': '21', 'Keep-Alive': 'timeout=5, max=100', 'Connection': 'Keep-Alive', 'Content-Type': 'text/html'}
This is redirect.php!
>>>
----------
关于cookies
-----cookie.php
<?php
var_dump($_COOKIE);
?>
--------------------
import requests
url = "http://192.168.3.135/pytest/cookie.php"
Coo = {"name":"Waffle"}
res = requests.get(url=url,cookies=Coo)
print(res.text)