前面说过,get 方法是可以向服务器发送信息的,除了可以请求需要的页面之外,也可以发送我们指定的内容,这就是通过 params 参数实现的
这个 params 参数是字典结构,前面说到的 headers 其实也是字典结构,但他们传输的时候是以 json 的方式传输的
首先我们构建一个字典,里面写上我们想要发送的信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
}
params = {
'myMessage': 'message'
}
url = 'https://www.httpbin.org/get'
response = requests.get(url, headers=headers, params=params)
print(response.text)
print(response.url)
httpbin.org 这个网站会根据我们发送的内容返回对应的信息,所以我们这里获取到的不是网站源码
{
"args": {
"myMessage": "message"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "www.httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
},
"origin": "1.194.187.57, 1.194.187.57",
"url": "https://www.httpbin.org/get?myMessage=message"
}
https://www.httpbin.org/get?myMessage=message
从返回的信息里可以看到,我们发送的内容在 args 里,同时这些内容也会被集成到 url 中,我们最后打印的 url 里就标识了我们所发送的内容,所以我们说使用 get 方法传输信息是不安全的,因为传输的信息会直接在 url 中表示出来
知道了 params 的作用我们就可以拿来做一写我们想做的事情
比如
百度的搜索其实也是使用了 get 方法
比如我们在百度首页搜索 明日方舟
可以看到网址
https://www.baidu.com/s?wd=明日方舟
这和我们前面加了 params 参数返回的url很像
https://www.httpbin.org/get?myMessage=message
当然,你的网址可能不是这个样子,这是各种原因造成的,但是你把网站按照我的格式打进去绝对可以实现搜索操作
我们看一下这个网址
https://www.baidu.com/s?wd=%E6%98%8E%E6%97%A5%E6%96%B9%E8%88%9F
https://www.baidu.com/s?wd=明日方舟
上面的网址是下面的网址编码的结果,我们写的时候不必在意,浏览器会自动替我们编码,所以可以直接用自然语言
我们来用python试一下模拟百度搜索
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
}
params = {
'wd': '明日方舟'
}
url = 'https://www.baidu.com/s'
response = requests.get(url, headers=headers, params=params)
print(response.text)
print(response.url)
注意我们使用的网址是 httsp://www.baidu.com/s
最后有个 s,这个才是搜索的网址
返回的源码太长就不贴了,就只看一下返回的 url
https://www.baidu.com/s?wd=%E6%98%8E%E6%97%A5%E6%96%B9%E8%88%9F
这是编码后的结果,其实和我们直接写成
https://www.baidu.com/s?wd=明日方舟
是一样的效果