PHPSpider结合Fiddler查询HTTP CODE代码错误原因

来源:互联网 发布:matlab怎么用数据画图 编辑:程序博客网 时间:2024/06/16 06:00

这几天在研究使用PHPSpider,依照作者的Demo做了几个case,在爬取某微信公众号导航网站,收集微信公众号内容时,遇到一个这样的错误,就是爬出1619条网页后,会收到服务器返回HTTP CODE 400 bad request错误,phpspider框架给出了错误代码,但是却找不到问题原因所在。

通过设置PHPSPIDER  requests类的init方法里面的curl配置,将curl_setopt(self::$ch, CURLOPT_PROXY,'127.0.0.1:8888');代理IP地址设置为本机,通过fiddler抓取获取的网页错误信息,发现在请求1620网页时,返回400错误,打开抓取的网页返回信息,显示请求的header头超过了允许值,仔细研究phpspider requests类库,发现每一次请求网页时,requests都会读取当前域名下的cookies,而抓取的网站,每一次访问一个网页都会产生一个cookie,这样本域名下的cookie数量一直在增大,到1620页面时cookies撑爆了header头导致服务器无法理解请求,所以返回了400。

在configs中未设置cookie时,requests类库在get_url时,自动发送网站自动产生的cookies。在访问网页时,网站因为不同网页都产生cookie时,要注意。

在configs中list_url_regexes/content_url_regexes中设置正则时要注意,尽量不要保留后面的“,”,更不能设置为"",否则将匹配所有。

在is_find_url为TRUE时,scan_page上发现url,设置将符合list_url_regexes/content_url_regexes的链接添加到待爬取队列。

if(($this->is_list_page($val))||($this->is_content_page($val)))
                {
                    if($this->is_list_page($val))
                    {
                        var_dump(self::$configs['list_url_regexes']);
                        log::info("print list-url-regexes");
                    }
                    if($this->is_content_page($val))
                    {
                        var_dump(self::$configs['content_url_regexes']);
                        log::info("print content-url-regexes...");
                    }
                    $urls[$k] = $val;
                    log::info('find-url: '.$val);
                }else

0 0
原创粉丝点击