Goutte 不会加载 ASP SSL 页面



我正在试用Goutte,这是一个基于Symfony2组件的PHP网络爬虫。我已经成功地以明文和SSL形式检索了Google。但是,我遇到过一个ASP/SSL页面无法加载。

下面是我的代码:

// Load a crawler/browser system
require_once 'vendor/goutte/goutte.phar';
// Here's a demo of a page we want to parse
$uri = '(removed)';
use GoutteClient;
$client = new Client();
$crawler = $client->request('GET', $uri);
echo $crawler->text() . "n";

相反,对于这个站点,上面代码末尾的回显给了我这样的结果:

错误的请求(无效的报头名称)

我可以在Firefox中很好地看到站点,并且可以使用wget --no-check-certificate检索它的HTML,没有其他选项(例如设置标头或用户代理)。

我怀疑我需要在Goutte中设置一些HTTP头。接下来我应该尝试哪些?

我发现我的浏览器和wget都在标题中添加了一个非空的用户代理字段,所以我假设Goutte在这里没有设置任何内容。在获取之前将这个头文件添加到浏览器对象中可以修复这个问题:

// Load a crawler/browser system
require_once 'vendor/goutte/goutte.phar';
// Here's a demo of a page we want to parse
$uri = '(removed)';
use GoutteClient;
// Set up headers
$client = new Client();
$headers = array(
    'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:21.0) Gecko/20100101 Firefox/21.0',
);
foreach ($headers as $header => $value)
{
    $client->setHeader($header, $value);
}
$crawler = $client->request('GET', $uri);
echo $crawler->text() . "n";

这里我复制了我的浏览器代理字符串,但在这种情况下,我认为任何东西都可以工作-只要它被设置。

顺便说一下,我在这里使用了浏览器UA,因为我试图准确地复制浏览器环境来调试这个特定的问题。一旦它工作了,我切换到一个自定义的UA,所以目标站点可以检测它作为一个机器人,如果他们希望(对于这个项目,我不认为有人有)。

我也遇到过这样的问题。

添加User-Agent标头是不够的。我使用setServerParameter功能添加了HTTP_USER_AGENT,效果非常好。

完整的代码如下:

// Load a crawler/browser system
require_once 'vendor/goutte/goutte.phar';
// Here's a demo of a page we want to parse
$uri = '(removed)';
$ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:21.0) Gecko/20100101 Firefox/21.0';
use GoutteClient;
// Set up headers
$client = new Client();
$client->setHeader('User-Agent', $ua);
$client->setServerParameter('HTTP_USER_AGENT', $ua);
$crawler = $client->request('GET', $uri);
echo $crawler->text() . "n";

相关内容

  • 没有找到相关文章

最新更新