代理 "多部分 "请求的结果是空体。

问题描述 投票:0回答:1

我们的团队最近迁移到了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);
guzzle zend-framework3 laminas-http laminas-psr7bridge
1个回答
0
投票

我在laravel中也遇到了类似的问题。你需要从原始请求中删除内容类型头, 因为它包含边界. 然后你应该修改你的请求以发送body为格式。多部分 自动生成新的内容类型和内容长度头。

© www.soinside.com 2019 - 2024. All rights reserved.