在 Guzzle 中设置代理

2022-08-31 00:07:30

我有一个问题设置代理在消耗,一个空白页显示,而与curl一起工作完美。我在gzzle和curl中使用的代码如下。这个代码有什么问题: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();
  }
}

和 CURL 的代码:

$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;

谢谢。


答案 1

至于咕噜咕噜6

Guzzle 文档提供有关为单个请求设置代理的信息

$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',
    ]);

UPD。我不知道为什么,但我面临着一个奇怪的行为。一台具有 6.2.2 版的服务器使用如上所述的配置效果很好,而另一台具有相同版本的服务器则从代理接收 HTTP 错误。它可以通过另一个配置结构来解决(在guzzle 3的文档中找到)400 Bad Request)

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

答案 2

对于代理,如果您有用户名和密码,则可以使用:

$client = new GuzzleHttp\Client();

$res = $client->request("POST", "https://endpoint.com", [
    "proxy" => "http://username:password@192.168.16.1:10",
]);

这在php中与gzzle一起工作。


推荐