如何用Laravel HTTP客户端发送Upstox授权token的curl请求?
使用Laravel HTTP客户端调用Upstox授权Token接口的正确方式
问题背景
需要调用Upstox的授权Token接口,对应的curl请求如下:
curl -X 'POST' 'https://api.upstox.com/v2/login/authorization/token' \ -H 'accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'code=<Your-Auth-Code-Here>&client_id=<Your-API-Key-Here>&client_secret=<Your-API-Secret-Here>&redirect_uri=<Your-Redirect-URI-Here>&grant_type=authorization_code'
尝试用Laravel HTTP客户端实现时返回400错误,错误代码如下:
$response = Http::withHeaders([ 'accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded' ])->post('https://api.upstox.com/v2/login/authorization/token', [ 'd' => $data, ]);
正确实现方式
你的代码错误在于将请求参数包裹在了d键下,而接口需要的是直接以x-www-form-urlencoded格式传递的键值对参数。正确的实现无需嵌套d键,直接传递参数数组即可:
- 先构造包含所有必填参数的数组:
$data = [ 'code' => '<Your-Auth-Code-Here>', 'client_id' => '<Your-API-Key-Here>', 'client_secret' => '<Your-API-Secret-Here>', 'redirect_uri' => '<Your-Redirect-URI-Here>', 'grant_type' => 'authorization_code' ];
- 发送请求:
$response = Http::withHeaders([ 'accept' => 'application/json' ])->post('https://api.upstox.com/v2/login/authorization/token', $data);
说明
- Laravel的HTTP客户端会自动将关联数组参数编码为
application/x-www-form-urlencoded格式的请求体,因此无需手动设置Content-Type头(如果显式设置也不会有问题,但不是必须的)。 - 之前的400错误是因为接口无法识别嵌套在
d键下的参数,必须直接传递每个参数的键值对。
内容的提问来源于stack exchange,提问作者rjcode
相关产品推荐
相关产品推荐

