主要内容:request中的headers和cookies的作用、如何设置headers或者cookies、什么时候可以不加cookies、GET或POST请求的区别、网页对请求的判断以及常见的网页状态码
目录
前提带入
李明借钱记
网络请求
实例
找到headers
区分网页请求GET or POST
headers
headers
网页返回状态码
200
非200
前提带入
首先通过一个小故事,理解一下网络请求过程中headers和cookies的作用吧
李明借钱记
村子里有一个懒汉李明,今天突然想借点钱出去下馆子,于是他想到了隔壁的大地主,写了一封信从窗户递到了地主家,村落布局如下:
地主收到信一看,虽然没有署名,但从这个方向来只能是李明了,李明这个人好吃懒做,不一定能还上自己的钱,不行,不借!
李明收到了回复,不借给自己钱,也明白了问题所在,自己信誉不好,地主不愿意借钱给自己,于是李明想借用一下法官的信誉:
地主一看,我这边是法官呀,这消息是法官发来的,法官在村子里口碑不错,人也仗义,这个钱,我借!我还从这个窗户给他:
李明借用法官的名头,拿到了钱,时间久了,藏不住呀,终于被地主和法官发现了,于是他们约定,如果法官要向地主借钱,还要加上署名,我是法官,我在什么时间之前跟你借过钱,我们的暗号是巴拉巴拉,这样下一次就尴尬了:
这时候李明想要借钱,除了自己说自己是法官,还要拿出一定的凭据来证明,比如我们上一次见面时什么时候,我们上一次借钱还钱是什么时候,而这些,李明是不知道的。就这样,村子的安全体系得到加强,效率也高了起来,只是李明再也不能通过歪心思借到钱了。
除非。。。
网络请求
除非法官是自己人,怎么说呢,网站是欢迎真人访问的,这会提高网站的流量和热度等等,但是网站不欢迎机器人,机器人做的事情对于网站来说是无利可图的。大家应该已经猜到了,这个机器人就是我们的爬虫,而这个借用法官的名声就是headers;后面的那些法官凭证就是网站为了安全设置的cookies。
那么法官是谁呢?当然就是我们自己啦,我自己访问一次网站,我作为真人我的headers和cookies我自愿告诉我的爬虫系统,他比李明就要幸运多了吧。
headers & cookies
实例
每一个页面访问,实际上都是我们在请求(resquest)对方给我们返回一个整体,上代码看示范:
url = 'https://bilibili.com/' res = requests.get(url) print(res.request) print(res) print(res.cookies) print(res.headers)
我向目标网址发出了请求,想要从收到的返回值看我的请求,整体对象,cookies和headers
结果如下图:
找到headers
这时我们随便点击一个网页,找到开发者工具:
在开发者工具里,我们可以查看到请求头的信息:
找到cookies
还是在同样的开发者工具中,找到cookies:
区分网页请求GET or POST
GET,请求指定的页面信息,并返回实体主体。
POST,向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据是全部被包含在请求体当中了。
get方法的特点:
get是主动缓存的,它具有安全性、幂等性
post方法的特点:
当然啦,对于我们爬虫来说,这些概念并不重要,重要的是:
请求不同,信息的传递方式也不同,尤其是cookies。
GET请求添加headers & cookies
headers
我们可以把它用字典(dist)类型,存在我们的代码里:
headers = {
"referer": "https://www.baidu.com.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
在下一次请求时,我们的代码增加headers:
headers = {
"referer": "https://www.baidu.com.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
url = 'https://bilibili.com/'
res = requests.get(url, headers=headers) #伪装请求头
print(res.request)
print(res)
print(res.cookies)
print(res.headers)
返回结果:
cookies
对于get请求的cookies,通常可以直接包含在headers中:
headers = {
"referer": "https://www.baidu.com.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
"cookie" : '在这里放上cookie' #----加在这里----#
}
url = 'https://bilibili.com/'
res = requests.get(url, headers=headers) #headers中包括了cookie信息
print(res.request)
print(res)
print(res.cookies)
print(res.headers)
POST请求添加headers & cookies headers
我们同样也是把它用字典(dist)类型,存在我们的代码里:
headers = {
"referer": "https://www.baidu.com.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
在下一次请求时,我们的代码增加headers,同时get变为post:
headers = {
"referer": "https://www.baidu.com.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
url = 'https://bilibili.com/'
res = requests.post(url, headers=headers) #伪装请求头,现在是post方法了!request.post()
print(res.request)
print(res)
print(res.cookies)
print(res.headers)
cookies
对于post请求来说,cookies是一个和headers同等地位的参数,所以单独存储使用:
headers = {
"referer": "https://www.baidu.com.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
}
cookie = '在这里放上cookie'
url = 'https://bilibili.com/'
res = requests.get(url, headers=headers, cookies=cookie) #headers和cookies分别传入
print(res.request)
print(res)
print(res.cookies)
print(res.headers)
网页返回状态码
200
正常的网页当然是返回200啦:
非200
也有可能返回一些 不是200的状态码,注意!非200的状态也有可能可以访问,只是大部分非200的状态代表了异常,拒绝了你的访问请求。
| 状态码Status Code | 是否能访问 | 含义 |
| 200 | 可以访问 | (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 |
| 202 | 可以访问 | (已接受) 服务器已接受请求,但尚未处理。 |
| 203 | 可以访问 | (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 |
| 300 | 无法访问 | (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 |
| 301 | 无法访问 | (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 |
| 302 | 无法访问 | (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
| 400 | 无法访问 | (错误请求) 服务器不理解请求的语法。 |
| 401 | 无法访问 | (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 |
| 403 | 无法访问 | (禁止) 服务器拒绝请求。 |
| 404 | 无法访问 | (未找到) 服务器找不到请求的网页。 |
| 406 | 无法访问 | (不接受) 无法使用请求的内容特性响应请求的网页。 |
| 500 | 无法访问 | (服务器内部错误) 服务器遇到错误,无法完成请求。 |
| 502 | 无法访问 | (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 |
| 503 | 无法访问 | (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 一般只是暂时状态。 |
当出现401、403这些状态的时候,就去检查你的headers或者cookies吧。
原创不易,转载标明出处。



