0

我们的团队最近迁移到了 Laminas,在这样做的过程中,我们的应用程序处理文件上传的方式现在遇到了问题。我们有 2 个应用程序(都是 MVC):一个视图应用程序和一个 API 应用程序。我们的视图应用程序处理来自浏览器的所有请求,并通过我们的 ApiProxyController 代理 API 请求。这适用于我们的每一个请求,除了我们的文件上传。对于这些请求 ( multipart/form-data;),我们已经看到,当请求到达我们的 API 应用程序时,请求的主体是空的。

我们在使用最新版本的 Guzzle HTTP 客户端和 Laminas 客户端时都遇到了这个问题。这是我们用来代理来自视图应用程序的请求的代码片段:

/* @var $request \Laminas\Http\PhpEnvironment\Request */
$request = $this->getRequest();
// URI object used to build PSR-7 request; update URI for proper forwarding

$uri = $request->getUri();
$uri->setHost($this->apiHost);

$psr7Request = Psr7ServerRequest::fromLaminas($request)
    ->withoutHeader('Host')
    ->withHeader('Authorization', sprintf('Bearer %s', $identity->getAccessToken()->getToken()));

$guzzle = new \GuzzleHttp\Client([
    // Turn off SSL certificate verification
    'verify' => false,
    // Prevent exceptions from being thrown due to HTTP status codes (e.g. 4xx, 5xx)
    'exceptions' => false,
]);

$psr7Response = $guzzle->send($psr7Request);
$response = Psr7Response::toLaminas($psr7Response);
4

1 回答 1

0

我在laravel中遇到了类似的麻烦。您需要从原始请求中删除内容类型标头,因为它包含边界。然后您应该修改您的请求以将正文作为多部分发送以自动生成新的内容类型和内容长度标头。

于 2020-05-22T13:56:28.830 回答