Python网络请求库Requests,妈妈再也不会担心我的网络请求了(二)

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 极客导航 即可关注,每个工作日都有文章更新。

一、概况

接着上篇说,如果你真以为Requests网络请求库只有Get请求和Post请求,那就大错特错了。它还一些其他用法,也是爬虫经常需要的,我们一起来看看吧。

二、使用

  • Auth验证

不知道小伙伴配置过刚买的路由器没有,刚配置的要进入后台一般都需要浏览器的Auth验证,需要输入用户名和密码,它的原理就是将用户名:密码base64加密后放在http的请求头部,然后发送给后台进行验证。我们的Requests也必然支持这种操作,不过用的相对较少。

import requestsauth=('admin', 'admin')response = requests.get('http://192.168.1.1', auth = auth
)
print (response.text)
复制代码
  • 代理

使用http或https代理,可能是我们解决反爬比较重要的一个环节。代理是什么?看图:

当我们的IP被封时,我们往往会采用代理。相当于我喜欢一个女孩,但是她把我拉入黑名单了,这个时候往往会找她的闺蜜进行操作,我要把对女孩说的话跟她闺蜜说,然后让闺蜜转交给她。闺蜜在把她对我说的话返回给我。如果这个闺蜜也被她拉入黑名单,我们在换一个她的闺蜜。理论上一般我们都会采用闺蜜池,也就是我们所说的IP代理池。需要钱呀!!!!

import requests# 根据协议类型,选择不同的代理
proxies = {"http": "http://12.34.56.79:9527","https": "http://12.34.56.79:9527",
}response = requests.get("http://www.baidu.com", proxies = proxies
)
print(response.text)
复制代码

私密代理:

import requests# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = { "http": "name:pwd@22.148.133.120:11163" 
}response = requests.get("http://www.baidu.com",proxies = proxy
)print (response.text)
复制代码

目前市场有很多免费代理和付费代理。比如西次代理、快代理等~

  • Cookies

使用python的requests开发爬虫类程序时,经常需要将之前请求返回的set-cookie值,作为下一个请求的cookie发送。比如模拟登录之后的返回的sessionId,就需要作为后续请求的cookie参数。

import requestsresponse = requests.get("http://www.baidu.com/")# 返回CookieJar对象:
cookiejar = response.cookies#打印cookiejar
print (cookiejar)#下一次访问带上 上一次的cookies
response = requests.get("http://www.baidu.com/", cookies=cookie_jar)#打印响应内容
print (response.text)
复制代码
  • Session

requests里,session是一个比较强大的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开, 会话能让我们在跨请求时候保持某些参数。比如在同一个 Session 实例发出的所有请求之间保持 cookie 。

import requests# 创建session对象,可以保存Cookie值
session = requests.session()# 添加请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}# post参数
data = {"email":"xxxx","password":"xxxx"
}# 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在session里
session.post("http://www.jikedaohang.com/login",data = data
)# session包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面。
# 比如个人中心页面
response = session.get("http://www.jikedaohang.com/1562336754/profile"
)#  打印响应内容
print (response.text)
复制代码
  • 处理HTTPS请求(SSL证书验证)

在想处理这块知识点,我们需要了解一些东西:

  • SSL:安全套接字层。是为了解决HTTP协议是明文,避免传输的数据被窃取,篡改,劫持等。
  • TSL:Transport Layer Security,传输层安全协议。TSL其实是SSL标准化后的产物,即SSL/TSL
  • HTTPS在传输数据时,会先建立TCP连接,建立起TCP连接后,会建立TSL连接。
  • 请求可以为HTTPS请求验证SSL证书,就像web浏览器一样,SSL验证默认是开启的,

如果证书验证失败,请求会抛出SSLError:

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
复制代码

遇到请求的SSL验证,可以直接跳过不验证,将verify=False设置一下即可。

import requests
response = requests.get("https://www.12306.cn/mormhweb/", verify = False)
print (response.text)
复制代码

如果验证,那么verify参数可以是传入CA_BUNDLE文件的路径或传入包含可信任CA证书的文件夹路径

import requests
response = requests.get("https://www.12306.cn/mormhweb/", verify = './certfile')
print (response.text)
复制代码

结果: 1.HTTPS请求进行SSL验证或忽略SSL验证才能请求成功,忽略方式为verify=False。

2.SSL证书是由CA机构颁发的,是需要花钱的。

三、总结

requests网络请求库,暂时我们就写到这里。下面我们会继续学习解析库的学习。

欢迎关注我的公众号,我们一起学习。

转载于:https://juejin.im/post/5c7d332cf265da2dd052620f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dbunit java_java - 错误地抛出了Java DBUnit AmbiguousTableNameException - 堆栈内存溢出

我正在尝试DBUnit(2.6.0),我正在尝试导出我的完整数据库(PostgreSQL)。 但是抛出以下异常:线程“main”中的异常org.dbunit.database.AmbiguousTableNameException:FLYWAY_SCHEMA_HISTORY这是正确的行为,因为我有两个具有相同名称…

Docker 命令详解(run篇)

参考:https://www.cnblogs.com/yfalcon/p/9044246.html 命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]Usage: Run a command in a new container中文意思为:通过run命令创建一个新的容器(container) 常用选…

java 同步 lock_关于java:同步是否像Lock.lock()一样驻留并发线程?

当我们调用lock.lock()或尝试输入synchronized块时,如果其他某个线程已经获得了该锁,则我们的线程将阻塞。 现在我的问题是,当我们查看lock.lock()的实现时,它会将获取锁委托给AQS,而AQS实际将当前线程驻留在该线程中(…

Idea项目中常见错误及笔记(Old)

1、Idea基础设置: File-->settings--> 1>修改字体:Font 2>修改编码格式:File Encodings(全部UTF-8,右下方复选框勾中--防止程序中的汉字转为ASCII码) 3>修改行号:Appearance:show line numbers show me…

java接口服务编排_GOKU API Gateway CE V3.1.0 发布:新增服务编排、配置版本管理等...

Goku API Gateway (中文名:悟空 API 网关)是一个基于 Golang 开发的微服务网关,能够实现高性能 HTTP API 转发、服务编排、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界…

maxcompute 2.0复杂数据类型之array

2019独角兽企业重金招聘Python工程师标准>>> 1. 含义 类似于Java中的array。有序、可重复。 2. 场景 什么样的数据,适合使用array类型来存储呢?这里列举了几个我在开发中实际用到的场景。 2.1 标签类的数据 为什么说标签类数据适合使用array类…

java中匿名数组_Swagger UI:数组中的多个匿名对象

对象数组的定义如下:type: arrayitems:type: objectproperties:prop1:type: stringprop2:type: integer# etc.在您的示例中,响应包含具有属性 balanceDisplaySettings 的对象,并且此属性包含对象数组 . 这可以定义如下:paths:/Pat…

java ioutils 写入文件_文件输入输出流工具: IOUtils使用总结

序言以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便。下面就结合源码,看看IOUTils都有什么用处吧!常用的静态变…

权限组件(6):权限分配的角色管理

效果图: 为了方便开发,先把中间件注释掉,要不还要在角色-权限表中添加对应关系。又因为二级菜单和面包屑导航需要中间件的变量,所以要在layout.html里面把这两个也注释掉。setting.py# rbac.middlewares.rbac.RbacMiddleware layo…

java 面试700问_JAVA面试700问(一)

1、Java环境中的字节码是什么?由Java 编译器生成的一种代码。由JVM生成的一种代码。Java源文件(Java Source File)的别名。一种写在类的实例方法中的代码。答案:由Java 编译器生成的一种代码。2、什么是Java垃圾回收机制?操作系统周期性的删除…

02-Django基础知识

一、内容回顾 1、web应用程序 2、HTTP协议 a、http协议特性 b、http请求格式 c、http响应格式 3、wsgiref模块 4、Django下载与简单应用 a、Django简介(MTV) b、下载django命令 c、创建项目命令 d、创建app应用 e、启动项目   二、今日概要 1、路由层&…

java条码大小_java - ML Kit条形码扫描:无效的图像数据大小

我想在捕获的图像中检测条形码。我使用android的camera2捕获图像。此后,将检索图像的元数据并将图像保存到设备。元数据全部传递到下一个活动,该活动是应用程序尝试检测条形码的地方。下一个活动是从先前保存的文件创建一个byte []。接下来,使…

MongoDB数据库泄露8亿电邮地址;微软开源Windows计算器;Linux 5.0 Kernel发布丨Q新闻...

本周要闻:华为正式宣布起诉美国政府;360 首席安全官谭晓生宣布离职;阿里开源 Flutter 应用框架 Fish Redux;微软开源 Windows 计算器;Linux 5.0 Kernel 发布;电邮验证服务泄漏 8 亿电邮地址;Chr…

mysql 视图 分页_mysql查看所有存储过程,函数,视图,触发器,表,分页

查询数据库中的存储过程和函数方法一:select name from mysql.proc where db your_db_name and type PROCEDURE //存储过程select name from mysql.proc where db your_db_name and type FUNCTION //函数方法二:show procedure status; //存储过程sh…

postman里测试文件上传(MultipartFile)

1、后台方法: Override PostMapping("/importNumberSpaceData") public DataImportOutDTO importNumberSpaceData(MultipartFile file) throws Exception { return dataImportOutDTO; } 2、启用postman 1、POST方法; 2、Body-form-data,key为后…

java解析上的jar包里的pom_Maven引入本地Jar包并打包进War包中的方法

1.概述在平时的开发中,有一些Jar包因为种种原因,在Maven的中央仓库中没有收录,所以就要使用本地引入的方式加入进来。2. 拷贝至项目根目录项目根目录即pom.xml文件所在的同级目录,可以在项目根目录下创建文件夹lib,如下…

持续集成之 Spring Boot 实战篇

本文作者: CODING 用户 - 何健 这次实战篇,我们借助「CODING 持续集成」,实现一个简单的 Spring Boot 项目从编码到最后部署的完整过程。本教程还有 B 站视频版,帮助读者更好地学习理解。 思路 在线上环境构建、测试、部署 这种情…

java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)

简单工厂的构成包括三个角色:1)抽象产品类2)具体产品类(继承抽闲产品类)3)工厂类(生产具体产品)具体代码实现1、抽象产品类/*** 抽象类*/public abstract class Car {/*** 产品抽象方法,将会由具体产品类实现*/public abstract void driving();}2、具体产…

Kibana中的Coordinate Map地图报索引错误的问题

今天做地图定位展示,展示的是ApacheWeb服务器的访问日志文件中的来源IP。但是中间出现了报错环节,说是索引不能匹配到geo_point类型,实在是不懂这是在说什么,后来在网站找了方法就解决了。主要报错如下: 报错信息&…

mysql数据库安装在unix_Linux下的数据库二:在Linux/Unix平台安装MySQL

推荐使用RPM工具来进行Linux下的MySQL数据库安装。目前的MySQLrpm安装文件包是在SuSE Linux7.3系统平台上打造而成的,但是在绝大多数支持RPM和glibc的其他Linux平台中也可以进行安装。如果选择通用的RPM安装包,那么RPM将静态链接到Linux的线程中。下面步…