HTTP请求方式-在线get请求从入门到精通
Requests简介及安装
Requests是Python的一个很实用的HTTP客户端库。Requests是在Urllib的基础上进一步封装的,具备Urllib的全部功能。
Requests可通过pip安装,具体如下:
Windos系统:
pip install request
Linux系统:
sudo pip install requests
GET请求
HTTP的常用请求是GET和POST,Requests对此区分两种不同的请求方式。GET
方法是用来请求指定的资源,使用 GET
请求应该只用于获取数据。GET请求有两种形式,分别是不带参数和带参数,以百度为例(此篇先说GET请求,POST请求见下篇):
#不带参数
https://www.baidu.com/
#带参数wd
https://www.baidu.com/s?wd=python#GET请求参数说明:#(1)wd是参数名,参数名由网站(服务器)规定;#(2)python是参数值,可由用户自行设置;#(3)如果一个URL有多个参数,参数之间用“&”连接。
判断URL是否带参数,可通过“?”判断。一般网址末端带有“?”,就说明有带请求参数,反之则没有带参数
Requests实现GET请求,对于带参数的URL有两种请求方式:
import requests
#第一种方式
r = requests.get('https://www.baidu.com/s?wd=python')
#第二种方式
url = 'https://www.baidu.com/s'
params = {'wd':'python'}
#左边params在GET请求中表示设置参数
r = requests.get(url,params=params)
#输出生成的URL
print(r.url)
两种方式都是请求同一个URL,在实际开发中建议使用第一种方式,因为代码简洁,如果参数是动态变化的,那么可使用字符串格式化对URL动态设置,例如:
'https://www.baidu.com/s?wd=%s'%('python')
GET请求示例(以百度为例)
#!/usr/bin/python
# -*- coding: utf-8 -*-from urllib import requestdef get_request():with request.urlopen('http://baidu.com')as f:data = f.read()print('Status:',f.status,f.reason)for k,v in f.getheaders():print('%s:%s'%(k,v))print('Data:',data.decode('utf-8'))def main():get_request()if __name__ == '__main__':main()
运行程序,得到HTTP响应的头和JSON数据,代码如下:
Status: 200 OK #状态码 200 OK 表明请求已经成功,默认情况下状态码为200的响应可以被缓存。
Date:Fri, 04 Jan 2019 12:27:16 GMT #通用首部,创建请求的日期和时间,采用格林尼治标准时间。
Server:Apache #处理请求的源头服务器所用到的软件或者产品(或组件产品)的相关信息。
Last-Modified:Tue, 12 Jan 2010 13:48:00 GMT #响应首部,其中包含源头服务器认定的资源做出修改的日期及时间。
ETag:"51-47cf7e6ee8400" #HTTP响应头,资源的特定版本的标识符。
Accept-Ranges:bytes #服务器使用 HTTP 响应头 Accept-Range 标识自身支持范围请求(partial requests),单位是bytes(字节)。
Content-Length:81 #Content-Length 是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。
Cache-Control:max-age=86400 #设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。
Expires:Sat, 05 Jan 2019 12:27:16 GMT #Expires 响应头包含日期/时间, 即在此时候之后,响应过期。如果在Cache-Control响应头设置了 "max-age" 或者 "s-max-age" 指令,那么 Expires 头会被忽略。
Connection:Close #决定当前的事务完成后,是否会关闭网络连接。值为close表明客户端或服务器想要关闭该网络连接,这是HTTP/1.0请求的默认值;如果该值是“keep-alive”,网络连接就是持久的,不会关闭。
Content-Type:text/html #在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。
Data: <html> #请求所返回的内容。
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
如果想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象添加HTTP头可以把请求伪装成浏览器。此内容后面会讲解。