我正在尝试测试Laravel API端点,并希望在代码中调用它。
$request = Request::create( $path, $method );
$response = Route::dispatch( $request );
此代码段适用于GET,但我也需要能够设置POST调用。将$方法设置为POST也可以,但我找不到详细说明如何附加帖子数据的文档。
有什么建议吗?
答案 0 :(得分:6)
正如您在评论中提到的,您可以使用$this->call()
,但实际上您也可以使用当前代码。如果您查看Request::create()
函数的签名,您可以看到它需要$parameters
作为第三个参数:
public static function create($uri, $method = 'GET', $parameters = array(), $cookies = array(), $files = array(), $server = array(), $content = null)
docblock说:The query (GET) or request (POST) parameters
因此,您只需将数据添加到Request::create()
$data = array('foo' => 'bar');
$request = Request::create( $path, $method, $data );
$response = Route::dispatch( $request );
答案 1 :(得分:1)
我花了将近一天的时间来尝试通过护照和Angular前端进行社交身份验证。
当我使用Restlet API客户端发出请求时,我总是得到成功的响应。 Restlet Client Request
但是使用下面的内部请求方法总是给我一个错误。
$request = Request::create(
'/oauth/token',
'POST',
[
'grant_type' => 'social',
'client_id' => 'your_oauth_client_id',
'client_secret' => 'your_oauth_client_secret',
'provider' => 'social_auth_provider', // e.g facebook, google
'access_token' => 'access_token', // access token issued by specified provider
]
);
$response = Route::dispatch($request);
$content = json_decode($response->getContent(), true);
if (! $response->isSuccessful()) {
return response()->json($content, 401);
}
return response()->json([
'content' => $content,
'access_token' => $content['access_token'],
'refresh_token' => $content['refresh_token'],
'token_type' => $content['token_type'],
'expires_at' => Carbon::parse(
$content['expires_in']
)->toDateTimeString()
]);
此特定错误:
{
error: "unsupported_grant_type",
error_description: "The authorization grant type is not supported by the
authorization server.",
hint: "Check that all required parameters have been provided",
message: "The authorization grant type is not supported by the authorization server."
}
我感觉到它与请求中发送表单数据的方式有关,因此在寻找一种适当的方式来在laravel中发出此类内部请求时,我遇到了一个示例项目,并提供了一个可行的实现:{{ 3}}。
总之,这是操作方法:
$proxy = Request::create(
'/oauth/token',
'POST',
[
'grant_type' => 'social',
'client_id' => 'your_oauth_client_id',
'client_secret' => 'your_oauth_client_secret',
'provider' => 'social_auth_provider', // e.g facebook, google
'access_token' => 'access_token', // access token issued by specified provider
]
);
return app()->handle($proxy);
希望这会有所帮助。