Guzzle “代理”;“多部分”;请求结果为空正文
我们的团队最近迁移到了Laminas,在这样做的过程中,我们的应用程序如何处理文件上传遇到了一个问题。我们有两个应用程序(都是MVC):一个视图应用程序和一个API应用程序。我们的view应用程序处理来自浏览器的所有请求,并通过ApiProxyController代理API请求。这适用于除文件上载之外的所有请求。对于那些请求(Guzzle “代理”;“多部分”;请求结果为空正文,guzzle,zend-framework3,laminas-http,Guzzle,Zend Framework3,Laminas Http,我们的团队最近迁移到了Laminas,在这样做的过程中,我们的应用程序如何处理文件上传遇到了一个问题。我们有两个应用程序(都是MVC):一个视图应用程序和一个API应用程序。我们的view应用程序处理来自浏览器的所有请求,并通过ApiProxyController代理API请求。这适用于除文件上载之外的所有请求。对于那些请求(multipart/formdata;),我们已经看到,当请求到达API应用程序时,请求的主体是空的 我们在使用最新版本的Guzzle HTTP客户端和Laminas客户端
multipart/formdata;
),我们已经看到,当请求到达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);
我在拉雷维尔也遇到过类似的麻烦。您需要从原始请求中删除内容类型头,因为它包含边界。
然后,您应该修改发送正文的请求,以自动生成新的内容类型和内容长度标题。我应该补充一点,
$psr7Request
正确地显示“parseBody”和“uploadedFiles”中的数据。但是,这两个问题都没有发送到API。使用本文中专门的代码对建议进行实际应用,将使提出问题的用户以及将来查看文章的用户的答案更有价值。