Python requests实现HTTP请求
By HelloWeb
2017-06-10
Python3本身的urllib也可以实现HTTP请求,不过requests这个库的功能简直逆天了,这里对HTTP请求中的GET方法、POST方法进行了实验。
一、环境配置
1.Web应用
为配合Python实现HTTP请求,需要访问Web应用,这个Web应用可以是任意的一个Web网站或Web应用。为了更好查看实现功能的基本过程,这里采用自编的Web应用(使用PHP语言实现)。关于Web应用的环境这里就描述了,读者可以自行搜索有关的资料了,否则偏题有点远了。
2.Python 3
当前最新版本3.6.1,我的机器是Win7,所以下载的是Windows版本python-3.6.1.exe,下载后执行可执行程序,按照提示安装即可(注意选择Add python 3.6 to PATH、pip工具)。安装完成后,python程序就可以直接执行了。
3.Requests
下载地址:https://pypi.python.org/pypi/requests/
当前版本是2.17.3,下载源码版本requests-2.17.3.tar.gz,解压后,执行安装命令pip install requests,即可安装成功,在python命令行形式下,执行import requests,如果没有报错,则安装成功了。
友情提醒1:慎重使用setup.py install来执行安装,可能导致某些库的安装不全,偶就在这里浪费了很多的时间啊。
友情提醒2:由于python语言的特性,建议使用IDLE编辑工具。
二、GET请求
1 基本GET请求和响应
基本请求中的Web应用程序如下:
<?php
header("Content-type: text/html; charset=utf-8");
setcookie("cookietest","1234567890",time()+3600*24);
print("It is a test !");
?>
在requests库中的get函数实现和HTTP的GET功能,Python程序代码如下:
import requests
req=requests.get('http://127.0.0.1/test1.php')
print(req.text)
很简单吧,这里要提醒的是get
函数的参数要写全,不要写成“
127.0.0.1/test1.php
”,这样写会出错哦。
这里对返回的信息处理很简单,只是打印了消息体中的信息“req.text”。对于返回值,当然是一个和HTML文档相关的一个Response对象了。对于这个Response对象的属性值有text、content(字节形式)、cookies、headers、raw(原始字节形式,对应HTTPResponse对象,这里不介绍了)、status_code。
2 带参数的GET请求
测试用的PHP程序如下:
<?php
header("Content-type: text/html; charset=utf-8");
setcookie("cookietest","1234567890",time()+3600*24);
$name=$_GET['name'];
$pass=$_GET['pass'];
print("Welcome, ".$name."<br>");
print("Your password is :".$pass."<br>");
?>
测试用的python程序如下:
import requests
url='http://127.0.0.1/test1.php'
data={'name':'abcd','pass':123456}
req=requests.get(url,params=data,timeout=1)
print(req.text)
3 设置HEADER参数
测试输入两个HEADER,其中一个是cookie值,另一个是测试用自定义头信息t2,测试用PHP程序如下:
<?php
header("Content-type: text/html; charset=utf-8");
setcookie("cookietest","1234567890",time()+3600*24);
$name=$_GET['name'];
$pass=$_GET['pass'];
print('Welcome, '.$name."\r\n");
print("Your password: ".$pass."\r\n");
$header1='';
$header2='';
foreach($_SERVER as $key=>$value){
if(($key=='HTTP_COOKIE')||($key=='HTTP_T2')){
print($key.":".$value."\r\n");
}
}
?>
测试用python程序如下:
import requests
url='http://127.0.0.1/test1.php'
data={'name':'abcd','pass':123456}
headers={'cookie':'abcdefg','t2':'12345678'}
req=requests.get(url,params=data,headers=headers,timeout=1)
print(req.text)
三、POST请求
基本的POST请求方法比较简单了,测试用的PHP程序代码如下:
<?php
header("Content-type: text/html; charset=utf-8");
setcookie("cookietest","1234567890",time()+3600*24);
$name=$_POST['name'];
$pass=$_POST['pass'];
print('Welcome, '.$name."\r\n");
print("Your password: ".$pass."\r\n");
?>
测试用python代码如下:
import requests
url='http://127.0.0.1/test1.php'
data={'name':'abcd','pass':123456}
req=requests.post(url,data=data,timeout=1)
print(req.text)
可以使用POST方法传输文件
import requests
url='http://127.0.0.1'
files={'file':open('test.txt','rb')}
req=requests.options(url,files=files)
print(req.text)
四、其他方法
HTTP请求还包括OPTIONS, PUT, DELETE等,分别对应函数options、put、delete。不过好像没有TRACE对应的函数,下次再找找。
这里给一个options的示范python程序,代码如下:
import requests
url='http://127.0.0.1'
req=requests.options(url)
print(req.headers)
本文介绍了如何使用Python的requests库进行HTTP请求,包括GET、POST方法的使用,设置参数、HEADER以及其它HTTP方法的简单示例,是Python网络请求的实用教程。
1285

被折叠的 条评论
为什么被折叠?



