Guzzle

2015-09-01 11 views
5

में प्रॉक्सी सेट करें मुझे गोज़ल में सेट प्रॉक्सी के साथ कोई समस्या है कि एक खाली पृष्ठ दिखाया गया था जबकि कर्ल सबकुछ सही काम करता है। कोड जो मैंने गोज़ल और कर्ल में उपयोग किया था नीचे आया था। क्या इस कोड के साथ गलत है: guzzle:Guzzle

use GuzzleHttp\Client; 
use GuzzleHttp\Exception\RequestException; 

require_once "vendor/autoload.php"; 

try { 
    $client = new Client(); 
    $request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org'); 
    $response = $client->send($request, [ 
     'timeout' => 30, 
     'curl' => [ 
      'CURLOPT_PROXY' => '*.*.*.*', 
      'CURLOPT_PROXYPORT' => *, 
      'CURLOPT_PROXYUSERPWD' => '*:*', 
     ], 

    ]); 
    echo '</pre>'; 
    echo($response->getBody()); 
    exit; 
} catch (RequestException $e) { 
    echo $e->getRequest(); 
    if ($e->hasResponse()) { 
     echo $e->getResponse(); 
    } 
} 

और कर्ल के साथ कोड:

$url = 'http://httpbin.org'; 
$ch = curl_init($url); 
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
curl_setopt($ch, CURLOPT_PROXY, '*.*.*.*'); 
curl_setopt($ch, CURLOPT_PROXYPORT, *); 
curl_setopt($ch, CURLOPT_PROXYUSERPWD, '*:*'); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
$page = curl_exec($ch); 
echo $page; 

धन्यवाद।

उत्तर

2

psr-7 के लिए प्रक्रिया अलग हो सकता है, लेकिन अगर आप एक ग्राहक का दृष्टांत को मानक तरीका का उपयोग कर रहे

path\to\project\vendor\guzzlehttp\guzzle\src\Client.php, lines 164-170 वातावरण चर को पढ़ने के लिए कोड भी शामिल है देखने के लिए अगर http_proxy और https_proxy पर स्थापित कर रहे हैं वर्तमान मशीन, और यदि हां, तो Guzzle उन मानों का उपयोग करेगा।

इसके अतिरिक्त, मुझे अपना HTTPS_PROXY = http://ip:port (https नहीं) सेट करना पड़ा, क्योंकि हमारी कार्यस्थल प्रॉक्सी http प्रोटोकॉल के माध्यम से https और http दोनों अनुरोधों को संभालने लगती है।

इस कॉन्फ़िगरेशन का लाभ यह है कि आपको अपने स्रोत कोड में प्रॉक्सी सेटिंग्स को छोटा करने की आवश्यकता नहीं है।

1

अभी एक ही समस्या थी, और सभी मुझे क्या करने की जरूरत तार के बजाय स्थिरांक के रूप में उपयोग कर्ल सरणी कुंजी था ..

$response = $client->send($request, [ 
       'timeout' => 30, 
       'curl' => [ 
        CURLOPT_PROXY => '*.*.*.*', 
        CURLOPT_PROXYPORT => *, 
        CURLOPT_PROXYUSERPWD => '*:*', 
      ], 
     ]); 

देखें कर्ल विकल्प कुंजी, वे अब तार नहीं हैं।

4

गुज़ल 6 के लिए।

Guzzle docs एक ही अनुरोध

$client->request('GET', '/', ['proxy' => 'tcp://localhost:8125']); 

के लिए प्रॉक्सी स्थापना के बारे में जानकारी देने के लेकिन आप सभी अनुरोधों को सेट कर सकते हैं जब ग्राहक आरंभ

$client = new Client([ 
     'base_uri' => 'http://doma.in/', 
     'timeout' => 10.0, 
     'cookie' => true, 
     'proxy' => 'tcp://12.34.56.78:3128', 
    ]); 

युपीडी। मुझे नहीं पता क्यों, लेकिन मुझे एक अजीब व्यवहार का सामना करना पड़ता है। गोज़ल संस्करण 6.2.2 वाला एक सर्वर ऊपर के रूप में कॉन्फ़िगरेशन के साथ बहुत अच्छा काम करता है, और उसी संस्करण वाले दूसरे को प्रॉक्सी से 400 Bad Request HTTP त्रुटि प्राप्त होती है। यह एक और config संरचना (docs for guzzle 3 में पाया)

$client = new Client([ 
    'base_uri' => 'http://doma.in/', 
    'timeout' => 10.0, 
    'cookie' => true, 
    'request.options' => [ 
     'proxy' => 'tcp://12.34.56.78:3128', 
    ], 
]); 
1
$response = \Drupal::httpClient()->post($settings['base_url'] . 'api/search/', [ 
    'verify' => true, 
    'body' => $post_data, 
     'headers' => [ 
     'Content-type' => 'application/json', 
     ], 
    'curl' => [ 
     CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2, 
     CURLOPT_PROXY => 'proxyip:58080'], 
    ] 
)->getBody()->getContents(); 

सेट प्रॉक्सी/https guzzle में और एसएसएल अपना काम सही से हल किया गया है।

0

Guzzle6 के लिए, मुझे लगता है कि प्रॉक्सी सेट करने के लिए मिडलवेयर को लागू करने का सबसे अच्छा तरीका है।

Guzzle6 डॉक्स से

: के रूप में नीचे

हम सेट कर सकते हैं:

use Psr\Http\Message\RequestInterface; 
use GuzzleHttp\HandlerStack; 
use GuzzleHttp\Handler\CurlHandler; 
use GuzzleHttp\Client; 
use GuzzleHttp\Middleware; 
use Util\Api; 
function add_proxy_callback($proxy_callback) { 
    return function (callable $handler) use ($proxy_callback) { 
     return function (RequestInterface $request,$options) use ($handler,$proxy_callback) { 
      $ip = $proxy_callback(); 
      $options['proxy'] = $ip; 
      return $handler($request,$options); 
     }; 
    }; 
} 
$stack = new HandlerStack(); 
$stack->setHandler(new CurlHandler()); 
$stack->push(add_proxy_callback(function() { 
    return Api::getIp(); //function return a ip 
})); 
$client = new Client(['handler'=>$stack]); 
$response = $client->request('GET','http://httpbin.org/ip'); 
var_dump((string)$response->getBody()); 
संबंधित मुद्दे