kazuho39
@kazuho39 (Itou Kazuho)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Goutteを使ってproxyサーバ経由でスクレイピングをしたい

教えていただきたいこと

Goutte("fabpot/goutte": "^4.0")を使ってスクレイピングを実装しており、
その際にproxyサーバ経由でアクセスしたいと思っているのですが、うまくいかないため分かる方がいれば教えていただきたいです。

前提

前提としてLaravel7, PHP7.3を使用しています。
また、実行しているサーバの関係で、ライブラリを一部修正しています。

vendor\symfony\browser-kit\HttpBrowser.php
use Symfony\Component\HttpClient\CurlHttpClient;

class HttpBrowser extends AbstractBrowser
{
  public function __construct(HttpClientInterface $client = null, History $history = null, CookieJar $cookieJar = null)
  {
    if (!$client && !class_exists(CurlHttpClient::class)) {
      throw new \LogicException(sprintf('You cannot use "%s" as the CurlHttpClient component is not installed. Try running "composer require symfony/http-client".', __CLASS__));
    }

    $this->client = $client ?? new CurlHttpClient();

    parent::__construct([], $history, $cookieJar);
  }

やってみたこと

その状態で、以下のように記載すればできると思い実行したのですがエラーとなってしまいます。
CurlHttpClientでproxyを指定したときの方法に誤りがあるのかと思っているのですが、解決できず。

use Goutte\Client;
use Symfony\Component\HttpClient\CurlHttpClient;

$client = new Client(
  new CurlHttpClient(['proxy' => 'http://192.0.2.1:8080'])
);
$crawler = $client->request('GET', 'https://スクレイピング対象');

以下のエラーが出力されています。

[previous exception] [object] (Symfony\\Component\\HttpClient\\Exception\\TransportException(code: 0): Timeout was reached for \"https://スクレイピング先URL\". at C:\\workspace\\vendor\\symfony\\http-client\\Response\\CurlResponse.php:323)

proxyに指定するIPとポートなどは、↓に表示されているのを使用しています。
https://www.freeproxylists.net/ja/

自己解決

以下の書き方で出来たみたいです。
→2021/12/27:やはりダメだったので、再度質問をオープンしました。

$client = new Client();
$crawler = $client->request('GET', 'スクレイピング先URL',
[
  'proxy' => 'IP:PORT',
]);
0

No Answers yet.

Your answer might help someone💌