『居善地』接口测试 — 7、Requests库使用proxies代理发送请求
1、代理的了解
在上图中我们可以把Web server看成是Google服务器,正常情况下在国内是无法访问Google服务器的,这个时候就需要使用代理软件,帮助我们发送请求来访问Google服务器。然后再通过代理软件把Google服务器响应的结果返回给我们的浏览器,这个代理软件就起到了一个代理的作用,帮助我们发送请求,帮助我们接收响应。
2、代理的分类
正常情况下,我们使用浏览器来访问百度服务器,可以正常的直接的进行访问。
(1)正向代理
正向代理类似一个跳板机,代理访问外部资源。
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,将请求发到代理服务器,代理服务器能够访问谷歌,这样由代理取到谷歌服务器返回的数据,再返回给我们,这样我们就能访问谷歌了。
(2)反向代理
反向代理(Reverse Proxy)实际运行方式是指,以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果,返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
(3)总结
- 正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端。
- 反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端。
形象的描述:
- 正向代理: 找黄牛买票。
- 反向代理: 租房的中介。
3、Requests库使用代理
只需要添加proxies
参数即可,接收字典格式的参数。
示例:
# 1.导入requests库
import requests
# 明确要访问的url地址
url = "https://ip.tool.chinaz.com/"
# 明确请求头信息
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
}
# 设置代理服务器地址
# 如果发送的是http请求,就使用http请求的代理,如果发送的是https请求,就使用一个https请求的代理。
proxies = {"https": "https://58.220.95.86:9401", "http": "http://113.214.13.1:1080"}
# 发送请求
response = requests.get(url=url, headers=headers, proxies=proxies)
# 查看响应结果的状态码
print(response.status_code)
# 获得响应结果的源码
print(response.text)
说明一下:
访问
url = "https://ip.tool.chinaz.com/"
这个地址的并不是我们自己的IP地址,而是proxies
属性中定义的IP地址。实际上我们把请求发送给代理服务器,代理服务器帮我们访问了上面的网址。
验证一下:
https://ip.tool.chinaz.com/
是一个检查IP地址的网站。- 通过执行上面的示例,看看
response.text
返回的请求源码中的IP地址信息。
在返回的源码中,是可以定位到如下信息的,证明我们上面使用的代理成功了。<div class="WhwtdWrap bor-b1s col-gray03" style="height:auto">
<span class="Whwtdhalf w15-0 lh45">58.220.95.86</span>
<span class="Whwtdhalf w15-0 lh45" style="cursor:pointer;" onclick="AiWenIpData('58.220.95.86')">58.220.95.86</span>
<span class="Whwtdhalf w15-0 lh45">987520854</span>
<span class="Whwtdhalf w30-0 lh24 tl ml80">
<p>江苏省扬州市电信</p>
</span>
</div>
- 寻找代理服务器请参考:
https://proxy.mimvp.com/freeopen
。
4、总结
为什么需要使用代理?
- 让服务器以为不是同一个客户端在请求。
- 防止我们的真实地址被泄露。
这里我们就知道Requests库中
proxies
代理如何使用,了解其原理就可以了。
『居善地』接口测试 — 7、Requests库使用proxies代理发送请求的更多相关文章
- 『居善地』接口测试 — 3、Requests库介绍
目录 1.Requests库 2.Requests库文档 3.Requests库安装 4.Requests库的使用 (1)使用步骤 (2)示例练习 5.补充:Json数据和Python对象互相转化 1 ...
- 『居善地』接口测试 — 4、Requests库发送GET请求
目录 1.使用Requests库发送带参数的GET请求 2.查看GET请求的内容 3.带请求头.参数的Get请求 Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求. ...
- 『居善地』接口测试 — 5、使用Requests库发送POST请求
目录 1.请求正文是application/x-www-form-urlencoded 2.请求正文是raw (1)json格式文本(application/json) (2)xml格式文本(text ...
- 『居善地』接口测试 — 6、Httpbin服务介绍
目录 1.Httpbin服务介绍 2.在Windows系统中部署Httpbin服务 3.在Linux系统中部署Httpbin服务 4.Httpbin访问方式 5.Httpbin常用调试接口 6.总结: ...
- 『居善地』接口测试 — 13、Moco框架的使用
目录 1.Moco框架第一个练习 2.Get方法的Mock实现 3.Post方法的Mock实现 4.请求中加入Cookies 5.请求中加入Header 6.Moco模拟重定向 7.综合练习 8.总结 ...
- 『居善地』接口测试 — 12、Moco框架介绍
目录 1.Mock功能介绍 2.Moco框架介绍 3.Moco框架在接口测试中的作用 4.Moco框架的优点 5.Moco框架的下载与启动 (1)Moco框架的下载 (2)Moco框架的启动 1.Mo ...
- 『居善地』接口测试 — 11、接口签名sign原理
目录 1.什么是加密以及解密? 2.加密方式的分类 (1)对称加密 (2)非对称加密 (3)总结: 3.接口签名sign原理 (1)什么是接口签名? (2)为什么需要做接口签名 (3)接口签名的实践方 ...
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『言善信』Fiddler工具 — 11、Fiddler中Composer功能详解
目录 1.Composer功能介绍 2.Composer界面说明 3.使用方式 (1)自定义Request请求 (2)Composer重复发送请求 (3)Composer篡改请求数据 1.Compos ...
随机推荐
- Typora+PicGo+阿里云写博客笔记
Typora+PicGo+阿里云写博客笔记 选择这三个工具的理由 我一直有在使用typora使用mardown写作,毕竟typora很香,可以实时预览,非常丝滑. 配合上PicGo这个图床工具简直绝了 ...
- Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationOutsideTLAB
重新申请 TLAB 分配对象事件:jdk.ObjectAllocationOutsideTLAB 引入版本:Java 11 相关 ISSUES: JFR: RecordingStream leaks ...
- Dedecms自定义表单后台列表展现方式样式更改
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- SPOJ 2713 线段树(sqrt)
题意: 给你n个数(n <= 100000),然后两种操作,0 x y :把x-y的数全都sqrt ,1 x y:输出 x-y的和. 思路: 直接线段树更新就行了,对于当 ...
- hdu5256序列变换(非递减子序列)
题意(中文直接粘吧)序列变换 Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元 ...
- UVA10905孩子们的游戏
题意: 给你n个数字,让你用这n个数组组成一个最大的数字并输出来. 思路: 这个题目看完第一反应就是直接按照字符串排序,然后轻轻松松写完,交上去直接wa了,为什么会wa呢?感觉 ...
- angr脚本——以angrctf解题记录为参考
angr脚本--以angrctf解题记录为参考 angr是用于逆向工程中进行二进制分析的一个python框架 符号执行 (Symbolic Execution)是一种程序分析技术.其可以通过分 ...
- 【dependencyManagement版本管理】dependencies.dependency.version is missing
maven 的gav的v(版本问题) 报错dependencies.dependency.version is missing 出现的场景 一个项目中有多个模块 父模块中出现dependencies. ...
- CentOS运行多个Tomcat操作步骤
一:修改环境变量 在/et/profile文件追加以下内容 # tomcat1 env ( 第一个tomcat 的环境变量) export CATALINA_HOME=/usr/local/apach ...
- .NET 反射(Reflection)
这节讲一下.NET 中的一个技术:反射(Reflection). 反射是一种很重要的技术,它可以在程序运行时,动态的获取类的实例,并调用实例中的任何方法.它就像一面镜子,映射出一个类的所有细节. ...