Python:使用urllib模拟登录出现400甚至404错误的可能原因
在确认代码没问题的前提下,出现400 Bad Request
错误很大一部分原因是出自header
。
很多自己设置header
都只是更改了'User-Agent'
部分,实际上还需要注意的是'Host'
部分和'Referer'部分。
'Host'
一般是对应网址的域名,不设置'Host'
可能会出现Invalid Host
错误。
'Referer'
是我最近爬某个需要登录的网站发现的问题,不添加'Referer'
的话可能会出现400 Bad Request
或者403 Forbidden
或者返回错误页面之类的千奇百怪的错误。
有时候,即是在第一次对某个网站发送POST
请求时,就可能需要带上'Referer'
,此时的'Referer'
值一般是这个网站的网址(包括http://
部分),否则POST
后会直接收到错误提示。
另外,'Referer'
并不是一直不变的,'Referer'
的本意即是告诉服务器这个GET
或POST
请求是从哪个页面发出的,所以一般来说'Referer'
是在一直变化的,所以需要对对应的网站抓包分析之后再用代码实现。
在尝试使用Scrapy
的时候发现Scrapy
会自动处理Referer
的问题,对于不需要太多自定义的爬虫来说,使用Scrapy
会方便许多。
想用scrapy访问返回json的url,报错400,url 全header POST方法 一下午没弄好呢。。。