我在 Laravel 环境中使用 Guzzle 6.0.2(也尝试使用 5.3.0)。
出于测试目的,我创建了带有索引方法的 Controller 来测试对其他 Web 服务器的 Guzzle POST 请求。
我的方法:
<?php
public function index()
{
$uri = 'https://payment.my-url.com/gw/testing';
// $uri = 'http://pay.my-url.com/gw/testing';
$client = new \GuzzleHttp\Client();
$resource = $client->post($uri, [
'json' => ['foo' => 'bar'],
'headers' => [
'Accept' => '*/*; q=0.5, application/xml',
'Content-Type' => 'application/json; charset=utf-8',
'User-Agent' => 'Client/1.0',
],
]);
$statusCode = $resource->getStatusCode();
}
当我尝试使用此方法访问 URL 时,我从我的服务器收到 502 Bad Gateway,但它仅在我尝试发送到 HTTPS $uri 时出现。如果我发送到 HTTP(非安全)uri,那么我的请求会转到外部 Web 服务器,在那里我可以转储 POST 数据数组。
我在 OSX 环境下有 nginx 1.8.0 和 PHP 5.6.9。
我还尝试为 guzzle 客户端添加额外的配置,但这没有任何区别:
'curl' => [
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
],
'verify' => false,
当我尝试使用 GuzzleHTTP 组件将 POST 发送到 HTTPS uri 时,为什么我的网络服务器给我 502 错误网关?
最佳答案
问题是因为在 Laravel 上使用 Bugsnag 错误处理程序
如果更改 Laravel handler.php 文件以使用默认的 laravel 处理程序,则会抛出错误,如果使用 Busnag 错误处理程序,则 nginx 会因 502 错误而死,并且不会向 Bugsnag 或 Web 日志报告任何错误。
文件示例:
<?php namespace Payrex\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
// use Bugsnag\BugsnagLaravel\BugsnagExceptionHandler as ExceptionHandler;
class Handler extends ExceptionHandler
{
// ...
}
关于php - 尝试 POST 到 SSL 安全 URL 时,GuzzleHTTP 会杀死 php-fpm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428057/