2014-05-16 98 views
1

我試圖調用客戶端服務器上使用Guzzle庫的Web服務 - 但服務器有一個代理,所以我得到了我的代碼中的404錯誤。如何在使用Guzzle HTTP客戶端時禁用代理?

如果我ssh到客戶端服務器,並嘗試

wget http://www.mywebsite.com/mywebservice 

我得到一個錯誤

Resolving proxy.theirdomainname.com (proxy.theirdomainname.com)... xx.xx.xx.xx 
Connecting to proxy.theirdomainname.com (proxy.theirdomainname.com)|xx.xx.xx.xx|:80... 
failed: Connection timed out. 

但是,如果使用

wget --no-proxy http://www.mywebsite.com/mywebservice 

我得到的結果

Resolving www.mywebsite.com (www.mywebsite.com)... xx.xx.xx.xx 
Connecting to www.mywebsite.com (www.mywebsite.com)|xx.xx.xx.xx|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/html] 

我可以看到一個選項中設置代理狂飲文檔中 - http://guzzle.readthedocs.org/en/latest/http-client/client.html#proxy

但我怎麼完全禁用使用代理?或者這會成爲服務器設置?

編輯:

$request = $client->get($this->url(), array('proxy' => '')) 
        ->setHeader('Accept', 'text/xml'); 

$response = $request->send(); 
var_dump($response); 

結果:

Fatal error: Uncaught exception 'Guzzle\Http\Exception\ClientErrorResponseException' 
with message 'Client error response [status code] 404 [reason phrase] Not Found [url] http://mywebsite.com' 
in /vendor/guzzle/guzzle/src/Guzzle/Http/Exception/BadResponseException.php:44 
Stack trace: #0 /guzzle/guzzle/src/Guzzle/Http/Message/Request.php(145): Guzzle\Http\Exception\BadResponseException::factory(Object(Guzzle\Http\Message\Request), Object(Guzzle\Http\Message\Response)) 
#1 [internal function]: Guzzle\Http\Message\Request::onRequestError(Object(Guzzle\Common\Event)) 
#2 /vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php(164): call_user_func(Array, Object(Guzzle\Common\Event)) 
#3 /vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php(53): Symfony in /vendor/guzzle/guzzle/src/Guzzle/Http/Exception/BadResponseException.php on line 44 
+0

不是一個答案,但你應該知道,代理服務器不是「他們有」的東西。它是您的網絡配置的一部分。 – marekful

+0

對不起,我不是很清楚 - 這是他們的服務器,而不是我們的。 –

+2

您沒有顯示使用Guzzle進行請求的代碼。閱讀文檔,我發現你可以將代理配置傳遞給'get()'方法。這不會幫助嗎? '$ client-> get('/',['proxy'=>'']);'鏈接:http://guzzle.readthedocs.org/en/latest/clients.html#proxy – marekful

回答

1

這是因爲Guzzle\Client自動神奇地設置代理看着你的系統環境變量。

280:   // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set 
    281:   if ($proxy = getenv('HTTP_PROXY')) { 
    282:    $settings['proxy']['http'] = $proxy; 
    283   } 
    284 
    285:   if ($proxy = getenv('HTTPS_PROXY')) { 
    286:    $settings['proxy']['https'] = $proxy; 
    287   } 

因此,如果您之前設置使用的東西代理像

set HTTP_PROXY=http://your.proxy.local:8080 
set HTTPS_PROXY=http://your.proxy.local:8080 

那麼這個代理服務器的設置將有所回升:如果你是在Linux或Windows沒關係。

你必須執行一個像MarcellFülöp這樣的空代理。

2

如果您正在使用Guzzlehttp6:

  • 如果要指定給定類型的協議的不同的代理:

    $client->request('GET', 'your_url_here', [ 
    'proxy' => [ 
    'http' => 'tcp://localhost:8125', // Use this proxy with "http" 
    'https' => 'tcp://localhost:9124', // Use this proxy with "https", 
    'no' => ['.mit.edu', 'foo.com'] // Don't use a proxy with these 
        ] 
    ]); 
    
  • 如果要禁用代理您的所有疑問:

    $client->request('GET','your_url_here',['proxy'=>'']); 
    

    Link to the official documentation.