在浏览器中返回 GuzzleHttp 响应对象导致 ERR_INVALID_CHUNKED_ENCODING
Returning GuzzleHttp response object causes ERR_INVALID_CHUNKED_ENCODING in browser
我在 laravel 5 中使用 guzzle 6 发送 post 请求,但是当我尝试访问处理方法中的 request() 时,我收到了 ERR_INVALID_CHUNKED_ENCODING post 请求。
这是我的代码:
Routes.php
Route::get('/guzzle', [
'as' => 'guzzle-test',
'uses' => 'TestController@getTest'
]);
Route::post('/guzzle', [
'as' => 'guzzle-post-test',
'uses' => 'TestController@postTest'
]);
TestController.php
public function getTest()
{
$client = new Client();
$data = [
'hey' => 'ho'
];
$request = $client->post(route('guzzle-post-test'), [
'content-type' => 'application/json'
], json_encode($data));
return $request;
}
public function postTest()
{
dd(getTest());
}
我进入了 post 请求处理程序,因为我试图删除一个字符串并且它到达了那里,但是如果我调用 request()
我得到了那个错误。对于我研究过的内容,它可能与内容长度有关,但在阅读了 guzzle 的文档和网络上的一些内容后,我可以找到如何在请求中适当地获取和传递内容长度。任何帮助将不胜感激!
首先,这里有一些测试代码,您应该能够根据自己的目的进行调整(另请参阅 GuzzleHttp 文档中的 form_params
):
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
return $response;
}
我刚刚 运行 遇到了同样的问题,发现尝试 return Laravel 中的响应对象给了我 ERR_INVALID_CHUNKED_ENCODING
。然而,对响应本身执行 dd()
向我展示了我真正想要看到的内容:
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
dd($response);
}
不幸的是,在没有做进一步研究的情况下,我无法解释为什么 ERR_INVALID_CHUNKED_ENCODING
在我尝试 return 客户端库的对象到浏览器时不断出现,但我最初的倾向是这是一个数据类型问题。
就您的问题而言,您实际上并不是要取回 "request",而是要取回 响应 。根据 http://docs.guzzlephp.org/en/latest/quickstart.html#using-responses,如果你想获得包含在响应对象中的 API 响应(或者至少在我的情况下,我做到了),你需要使用 getBody()
方法:
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
return $response->getBody();
}
当然,如果您希望它是一个 JSON 响应(即 REST),那么只需将它传递给 json_decode()
即可取回您的关联数组。
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
return json_decode($response->getBody(), true); // true = assoc. array
}
希望对您有所帮助!
我在 laravel 5 中使用 guzzle 6 发送 post 请求,但是当我尝试访问处理方法中的 request() 时,我收到了 ERR_INVALID_CHUNKED_ENCODING post 请求。
这是我的代码:
Routes.php
Route::get('/guzzle', [
'as' => 'guzzle-test',
'uses' => 'TestController@getTest'
]);
Route::post('/guzzle', [
'as' => 'guzzle-post-test',
'uses' => 'TestController@postTest'
]);
TestController.php
public function getTest()
{
$client = new Client();
$data = [
'hey' => 'ho'
];
$request = $client->post(route('guzzle-post-test'), [
'content-type' => 'application/json'
], json_encode($data));
return $request;
}
public function postTest()
{
dd(getTest());
}
我进入了 post 请求处理程序,因为我试图删除一个字符串并且它到达了那里,但是如果我调用 request()
我得到了那个错误。对于我研究过的内容,它可能与内容长度有关,但在阅读了 guzzle 的文档和网络上的一些内容后,我可以找到如何在请求中适当地获取和传递内容长度。任何帮助将不胜感激!
首先,这里有一些测试代码,您应该能够根据自己的目的进行调整(另请参阅 GuzzleHttp 文档中的 form_params
):
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
return $response;
}
我刚刚 运行 遇到了同样的问题,发现尝试 return Laravel 中的响应对象给了我 ERR_INVALID_CHUNKED_ENCODING
。然而,对响应本身执行 dd()
向我展示了我真正想要看到的内容:
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
dd($response);
}
不幸的是,在没有做进一步研究的情况下,我无法解释为什么 ERR_INVALID_CHUNKED_ENCODING
在我尝试 return 客户端库的对象到浏览器时不断出现,但我最初的倾向是这是一个数据类型问题。
就您的问题而言,您实际上并不是要取回 "request",而是要取回 响应 。根据 http://docs.guzzlephp.org/en/latest/quickstart.html#using-responses,如果你想获得包含在响应对象中的 API 响应(或者至少在我的情况下,我做到了),你需要使用 getBody()
方法:
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
return $response->getBody();
}
当然,如果您希望它是一个 JSON 响应(即 REST),那么只需将它传递给 json_decode()
即可取回您的关联数组。
public function validateRecaptcha()
{
$client = new Client;
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'form_params' => [
'secret' => env('RECAPTCHA_SECRET'),
'response' => Request::input('g-recaptcha-response'),
'remoteip' => Request::ip()
]
]);
return json_decode($response->getBody(), true); // true = assoc. array
}
希望对您有所帮助!