今天有个客户朋友问我,使用代理IP做爬虫的过程中,提示错误:Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long.这个问题应该如何解决?
我也是第一次遇到这个问题,从字面意思来看,是请求头过长造成的,于是我让他检查下请求头。我们知道,当 IIS7/7.5 收到的请求头的长度超过16K(默认值),就会引发上面所说的那个错误。这个请求头的长度限制是由注册表(HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters)中的两个参数 MaxFieldLength(请求头) 与 MaxRequestBytes(请求头与请求体) 决定的。
所以,解决这个问题有两种方法,一是检查请求头,减小请求头的长度。二是修改注册表中的两个参数 MaxFieldLength和MaxRequestBytes。但有时候请求头的长度实在无法缩短减小,那么就只有修改注册表参数了。那么如何修改操作呢?
在注册表里找到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters :
1. 添加类型为 DWORD(32-bit)、名为 MaxFieldLength、值为十进制32768(32K)的项目;
2. 添加类型为 DWORD(32-bit)、名为 MaxRequestBytes、值为十进制32768(32K)的项目。
添加好了是不是就是生效了呢?并没有,有两种办法让它生效:一是重启服务器,二是运行三个命令:
net stop http
net start http
iisreset
到此,就彻底解决了这个问题了。