1、常用两种HTTP请求方法
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
1. GET - 从指定的资源请求数据。
2. POST - 向指定的资源提交要被处理的数据。
-
GET方法
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制
- GET 请求只应当用于取回数据
-
POST 方法
- POST 请求不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 不能被收藏为书签
- POST 请求对数据长度没有要求
2、GET 和 POST对比
对比表格
-
值得注意的是:
1、Get 是用来从服务器上获得数据,Post 是用来向服务器上传递数据。
2、Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action* 所指向 URL。
3、实例操作:
- 准备工作:
1.打开百度搜索"中国";
1-1
2.精简url:
1-2
3.打开f12开发者工具我们看到请求方式为GET,注意两个红色框的区别:
1-3
4.对比两个url:
(1)https://www.baidu.com/s?ie=utf-8&wd=中国
(2)https://www.baidu.com/s?ie=utf-8&wd=%E4%B8%AD%E5%9B%BD
(2)结论:需要使用转码:from urllib.parse import quote
5.GET方法代码演示:
.方式一:
from fake_useragent import UserAgent
from urllib.parse import quote, urlencode
from urllib.request import Request, urlopen
def test_get(url):
search_word = input("请输入要搜索的内容:")
# quote: 自动拼接,拼接单个参数
f_url = url.format(quote(search_word))
# (1)
# print(f_url)
headers = {'User-Agent': UserAgent().random}
# 获取请求
req = Request(f_url, headers=headers)
# 获取响应
resp = urlopen(req)
# (2)
print(resp.read().decode())
if __name__ == '__main__':
url1 = "https://www.baidu.com/s?ie=utf-8&wd={}"
test_get(url1)
(1)
(2)
(2-1)
.方式二:
from fake_useragent import UserAgent
from urllib.parse import quote, urlencode
from urllib.request import Request, urlopen
def test_get(url):
search_word = input("请输入要搜索的内容:")
params = {
'ie': "utf-8",
'wd': search_word
}
# quote: 自动拼接,拼接单个参数
# f_url1 = url.format(quote(search_word))
# urlencode: 自动拼接,拼接多个参数
f_url1 = url.format(urlencode(params))
# (1)
# print(f_url)
headers = {'User-Agent': UserAgent().random}
# 获取请求
req = Request(f_url1, headers=headers)
# 获取响应
resp = urlopen(req)
# (2)
print(resp.read().decode())
if __name__ == '__main__':
url1 = "https://www.baidu.com/s?ie=utf-8&wd={}"
url2 = "https://www.baidu.com/s?&{}"
# test_get(url1)
test_get(url2)
6.POST代码演示:
- 准备工作:
1.进入中国卫生人才官网:https://www.21wecan.com/
2.打开F12开发者调试工具;全站搜索"人才"。如图:
6-1
3.查看目标请求url:https://www.21wecan.com/rcwjs/searchlist.jsp和请求方法:POST
6-2
4.查看请求头信息和请求参数:
6-3
5.开始干:
# -*- coding:utf-8 -*-
from urllib.request import Request, urlopen
from urllib.parse import urlencode
from fake_useragent import UserAgent
def download(url):
headers = {
"User-Agent": UserAgent().random,
}
datas = {
"searchword": "人才"
}
f_data = urlencode(datas)
req = Request(url, headers=headers, data=f_data.encode())
resp = urlopen(req)
print(resp.read().decode())
if __name__ == '__main__':
url = "https://www.21wecan.com/rcwjs/searchlist.jsp"
download(url)
6-5
6-6
6.结论:观察6-5和6-6的图发现目的是成功了,但是没有匹配到页面检查结果的数据原因在于:检查结果数据在iframe内,需要使用selenium跳进iframe作用域里去匹配相对应的元素。