Python中requests库
Posted A-L-Kun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中requests库相关的知识,希望对你有一定的参考价值。
文章目录
requests库
一、 基本概念
1、 简介
requests 模块是 python 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner
2、 获取
通过 pip install requests
安装 requests 库
导包:
import requests
3、 http 协议
http ,超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收html页面的方法,HTTP是一种基于"请求与响应"模式的、无状态的应用层协议。HTTP协议采用URL作为定位网络资源的的标识符
3.1 URL
统一资源定位符是互联网上标准资源地址。互联网上的每一个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它
URL 的一般语法格式为:
protocol://host[:port]/path/[?query]#fragment
http://www.itcast.cn/index.html?name=andy&age=18#link
组成 | 说明 |
---|---|
protocol | 通信协议,常用:http、https 等 |
host | 主机(域名) |
port | 端口号,可选,省略时候使用方案的默认端口,如:http的默认端口为80 |
path | 路径,由零或多个 ‘/’ 符号隔开的字符串,一般用来表示主机上的一个目录或文件地址 |
query | 参数,以键值对的形式通过 & 来连接 |
fragment | 片段,# 后面内容常见于链接 锚点 |
url是通过HTTP协议存取资源的的Internet路径,一个URL对应一个数据资源
3.2 常用 http 请求方法
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得资源的头部信息 |
POST | 请求向URL位置的资源后附加新的消息 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
GET
,HEAD
是从服务器获取信息到本地,PUT
,POST
,PATCH
,DELETE
是从本地向服务器提交信息。通过URL和命令管理资源,操作独立无状态,网络通道及服务器成了黑盒子
二、 使用方法
1、 基本语法
requests 库中的方法
方法 | 说明 |
---|---|
requsts.requst() | 构造一个请求,最基本的方法,是下面方法的支撑 |
requsts.get() | 获取网页,对应HTTP中的GET方法 |
requsts.post() | 向网页提交信息,对应HTTP中的POST方法 |
requsts.head() | 获取html网页的头信息,对应HTTP中的HEAD方法 |
requsts.put() | 向html提交put方法,对应HTTP中的PUT方法 |
requsts.patch() | 向html网页提交局部请求修改的的请求,对应HTTP中的PATCH方法 |
requsts.delete() | 向html提交删除请求,对应HTTP中的DELETE方法 |
主要使用 get 和 post 方法
2、 具体使用方法
2.1 get
2.1.1 基本语法
resp = requests.get(url="http://www.baidu.com")
print(resp)
resp 是一个Response对象,一个包含服务器资源的对象
2.1.2 常用参数
参数 | 类型 | 作用 |
---|---|---|
params | 字典 | url为基准的url地址,不包含查询参数;该方法会自动对params字典编码,然后和url拼接 |
url | 字符串 | requests 发起请求的地址 |
headers | 字典 | 请求头,发送请求的过程中请求的附加内容携带着一些必要的参数 |
cookies | 字典 | 携带登录状态 |
proxies | 字典 | 用来设置代理 ip 服务器 |
timeout | 整型 | 用于设定超时时间, 单位为秒 |
2.2 post
2.2.1 基本语法
word = input("please input a word")
url = "https://fanyi.baidu.com/sug"
data =
"kw": word,
headers =
'User-Agent': "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 96.0.4664 .93 Safari / 537.36",
resp = requests.get(url=url, data=data, headers=headers)
print(resp.json())
2.2.2 常用参数
参数 | 类型 | 作用 |
---|---|---|
data | 字典 | 作为向服务器提供或提交资源时提交,主要用于 post 请求 |
json | 字典 | json格式的数据, json合适在相关的html |
注意:
- data 和 params 的区别是: data提交的数据并不放在url链接里, 而是放在url链接对应位置的地方作为数据来存储
- data 和 json 的作用类似,适用方法相同
- get 里面的参数大部分也适用
2.3 response
属性 | 说明 |
---|---|
resp.status_code | http请求的返回状态,若为200则表示请求成功。 |
resp.raise_for_status() | 该语句在方法内部判断resp.status_code 是否等于200,如果不等于,则抛出异常 |
resp.text | http响应内容的字符串形式,即返回的页面内容 |
resp.encoding | 从http header 中猜测的相应内容编码方式 |
resp.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
resp.content | http响应内容的二进制形式 |
resp.json() | 得到对应的 json 格式的数据,类似于字典 |
2.4 head
2.4.1 基本语法
url = "http://www.baidu.com"
headers =
'User-Agent': "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 96.0.4664 .93 Safari / 537.36",
resp = requests.head(url=url)
print(resp.headers)
resp.headers 方法反馈头部内容,很少网络流量获得概要信息
2.5 put
python接口自动化
- put请求的作用:更新资源
其语法和 post 请求的语法类似
put 和 post 区别:
- 新建一条记录的话就用post
- POST 方法被用于请求源服务器接受请求中的实体作为请求资源的一个新的从属物
- 更新一条记录的话就用put
- PUT方法请求服务器去把请求里的实体存储在请求URI标识下
python Requests库总结
什么是Requests库?
requests库github地址:https://github.com/requests/requests
Reqyests库主要用来准备Request和处理Response。
为什么要学习Requests库?
web开发和爬虫都需要学习的东西,在服务端编程中理解好Requests库可以更好的编写Restful API的程序,还是自动化测试的工具箱。
安装Requests库
pip install requests
这个是安装requests库的
pip install gunicorn
gunicorn是一个python Wsgi http server,只支持在Unix系统上运行,来源于Ruby的unicorn项目。
pip install httpbin
httpbin是一个http库的测试工具
gunicorn httpbin:app
通过gunicorn启动httpbin,可以通过127.0.0.1/8000访问
简单了解http协议
http协议:HyperText Transfer Protocl 超文本传输协议.
http协议是应用层上的一个无状态的协议,是一种为分布式,协作式,多媒体信息服务的协议。
> GET / HTTP/1.1 > Host: www.imooc.com > User-Agent: curl/7.47.0 > Accept: */*
Request:
第一行:分别是方法:GET,地址:/,协议:HTTP/1.1。
二三四行以key:value的形式组成headers。
< HTTP/1.1 200 OK < Server: nginx < Date: Sun, 16 Sep 2018 14:36:46 GMT < Content-Type: text/html; charset=utf-8 < Content-Length: 249314 < Connection: keep-alive < Vary: Accept-Encoding < Vary: Accept-Encoding < X-Varnish: 636943726 641514266 < Age: 20 < Via: 1.1 varnish (Varnish/6.0) < X-Cache: HIT from CS42 < Accept-Ranges: bytes
Response:
start line:状态码,具体解释
后面的也是组成一个headers,告诉浏览器怎么具体解析
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>慕课网-程序员的梦工厂</title> <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"> <meta name="renderer" content="webkit" /> <meta name="mobile-agent" content="format=wml"; url="https://m.imooc.com/"> <link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.imooc.com/"> <meta name="mobile-agent" content="format=xhtml"; url="https://m.imooc.com/"> <meta name="mobile-agent" content="format=html5"; url="https://m.imooc.com/"> <meta property="qc:admins" content="77103107776157736375" /> <meta property="wb:webmaster" content="c4f857219bfae3cb" /> <meta http-equiv="Access-Control-Allow-Origin" content="*" /> <meta http-equiv="Cache-Control" content="no-transform " /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <link rel="dns-prefetch" href="//www.imooc.com" /> <link rel="dns-prefetch" href="//img.imooc.com" /> <link rel="dns-prefetch" href="//img.mukewang.com" /> <link rel="apple-touch-icon" sizes="76x76" href="/static/img/common/touch-icon-ipad.png"> <link rel="apple-touch-icon" sizes="120x120" href="/static/img/common/touch-icon-iphone-retina.png"> <link rel="apple-touch-icon" sizes="152x152" href="/static/img/common/touch-icon-ipad-retina.png"> <meta name="Keywords" content="" /> <meta name="Description" content="慕课网(IMOOC)是IT技能学习平台。慕课网(IMOOC)提供了丰富的移动端开发、php开发、web前端、android开发以及html5等视频教程资源公开课。并且富有交互性及趣味性,你还可以和朋友一起编程。" />
Message Body
以上是关于Python中requests库的主要内容,如果未能解决你的问题,请参考以下文章