在網絡請求中,User-Agent是客戶端表明身份的一種標識,在服務器中,可以判斷User-Agent是否爲瀏覽器行爲。
瀏覽器User-Agent如下:
Chrome:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Firefox:
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0
Safari:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
IE:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)
而當我們代碼爬蟲時,不添加此類參數,如果服務器中添加User-Agent請求時,那麼代碼請求這不會通過,返回403或其它參數
在Python中,Requests庫向服務器發送Http請求時,它的User-Agent爲:
python-requests/版本號
scrapy框架User-Agent爲:
Scrapy/版本號 (+https://scrapy.org)
對於User-Agent的驗證,可以通過僞造User-Agent來突破。
python中,可以使用 fake_useragent 庫,裏面包含各種User-Agent參數。也可以自定義設置User-Agent
- ngnix中,反爬輔助配置。
server {
listen 80;
server_name www.baidu.com; #真實域名
charset utf-8;
location /verify/uas/ {
# User-Agent中,參數含有python、java、scrapy字樣則被限制
if ($http_user_agent ~* (python|java|scrapy)){
return 403;
}
root /root/www/html;
index index.html;
}
}
同樣的,除了User—Agent之外,還有Host,Referer等參數
如:
server {
location / {
# 沒有Referer,或請域值爲www.baidu.com,則允許訪問
valid_referers none www.baidu.com;
if ($invalid_referers){
return 403;
}
root /root/www/html;
}
}