2016-03-04 148 views
0

我试过使用Guzzle的文档来设置代理,但它不工作。官方的Goutub Goutub页面已经死了,所以在那里找不到任何东西。在Goutte中设置代理

任何人都知道如何设置代理?

这是我已经试过:

$client = new Client(); 
$client->setHeader('User-Agent', $user_agent); 
$crawler = $client->request('GET', $request, ['proxy' => $proxy]); 

回答

0

你想分辩,但在GOUTTE \客户:: doRequest(),当创建狂饮客户

$guzzleRequest = $this->getClient()->createRequest(
     $request->getMethod(), 
     $request->getUri(), 
     $headers, 
     $body 
); 

选项不过去了创建请求对象。所以,如果你想使用代理,然后覆盖类GOUTTE \客户端,方法doRequest(),并在

$guzzleRequest = $this->getClient()->createRequest(
     $request->getMethod(), 
     $request->getUri(), 
     $headers, 
     $body, 
     $request->getParameters() 
); 

例覆盖类替换此代码:

<?php 

namespace igancev\override; 

class Client extends \Goutte\Client 
{ 
    protected function doRequest($request) 
    { 
     $headers = array(); 
     foreach ($request->getServer() as $key => $val) { 
      $key = implode('-', array_map('ucfirst', explode('-', strtolower(str_replace(array('_', 'HTTP-'), array('-', ''), $key))))); 
      if (!isset($headers[$key])) { 
       $headers[$key] = $val; 
      } 
     } 

     $body = null; 
     if (!in_array($request->getMethod(), array('GET','HEAD'))) { 
      if (null !== $request->getContent()) { 
       $body = $request->getContent(); 
      } else { 
       $body = $request->getParameters(); 
      } 
     } 

     $guzzleRequest = $this->getClient()->createRequest(
      $request->getMethod(), 
      $request->getUri(), 
      $headers, 
      $body, 
      $request->getParameters() 
     ); 

     foreach ($this->headers as $name => $value) { 
      $guzzleRequest->setHeader($name, $value); 
     } 

     if ($this->auth !== null) { 
      $guzzleRequest->setAuth(
       $this->auth['user'], 
       $this->auth['password'], 
       $this->auth['type'] 
      ); 
     } 

     foreach ($this->getCookieJar()->allRawValues($request->getUri()) as $name => $value) { 
      $guzzleRequest->addCookie($name, $value); 
     } 

     if ('POST' == $request->getMethod() || 'PUT' == $request->getMethod()) { 
      $this->addPostFiles($guzzleRequest, $request->getFiles()); 
     } 

     $guzzleRequest->getParams()->set('redirect.disable', true); 
     $curlOptions = $guzzleRequest->getCurlOptions(); 

     if (!$curlOptions->hasKey(CURLOPT_TIMEOUT)) { 
      $curlOptions->set(CURLOPT_TIMEOUT, 30); 
     } 

     // Let BrowserKit handle redirects 
     try { 
      $response = $guzzleRequest->send(); 
     } catch (CurlException $e) { 
      if (!strpos($e->getMessage(), 'redirects')) { 
       throw $e; 
      } 

      $response = $e->getResponse(); 
     } catch (BadResponseException $e) { 
      $response = $e->getResponse(); 
     } 

     return $this->createResponse($response); 
    } 
} 

并尝试发送要求

$client = new \igancev\override\Client(); 
$proxy = 'http://149.56.85.17:8080'; // free proxy example 
$crawler = $client->request('GET', $request, ['proxy' => $proxy]);