gpt4 book ai didi

php - 如何使用 PHP SDK 3 从 AWS API Gateway 访问 API

转载 作者:行者123 更新时间:2023-12-05 03:08:16 28 4
gpt4 key购买 nike

谁能帮忙弄清楚如何使用 AWS 签名、AWS 凭证和 PHP SDK 3 来访问 API 网关 API?似乎 AWS 签名实际上并未将 header 附加到 Guzzle 请求。

这是我的代码:

<?php

require 'vendor/autoload.php';

use Aws\Credentials\Credentials;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use Aws\Signature\SignatureV4;

$access_key = '<access_key>';
$secret_key = '<secret_key>';
$url = 'https://<api-id>.execute-api.us-east-1.amazonaws.com/v1/camel?q=*';
$region = 'us-east-1';

$credentials = new Credentials($access_key, $secret_key);
var_dump($credentials);

$client = new Client();
$request = new Request('GET', $url);
var_dump($request);

$s4 = new SignatureV4("execute-api", $region);
$s4 = new SignatureV4("execute-api", "us-east-1");
$s4->signRequest($request, $credentials);
var_dump($s4);
var_dump($request);

$response = $client->send($request);

我得到的错误是:

( ! ) Fatal error: Uncaught exception 
'GuzzleHttp\Exception\ClientException' with message ' in
/path/to/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on
line 113

( ! ) GuzzleHttp\Exception\ClientException: Client error: `GET
https://<api-id>.execute-api.us-east-1.amazonaws.com/v1/camel?q=*`
resulted in a `403 Forbidden` response: {"message":"Missing
Authentication Token"} in
/path/to/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on
line 113
Call Stack
# Time Memory Function Location
1 0.0002 234048 {main}( ) ../access.php:0
2 0.2801 486272 GuzzleHttp\Client->send( ) ../access.php:29
3 0.3787 574224 GuzzleHttp\Promise\Promise->wait( ) ../Client.php:106

access.php 的第 29 行是:

$response = $client->send($request);

从 var_dumps 中可以看出没有添加任何 header 。我能够在 API 网关和 Postman 中成功测试这个端点。启用 CORS 似乎没有什么不同。

有人解决过这个问题吗?

此问题也包含在 https://forums.aws.amazon.com/post!reply.jspa?messageID=795522 中和 https://forums.aws.amazon.com/thread.jspa?messageID=774631&tstart=0但那里没有解决方案。

最佳答案

Michael,谢谢你在上面的帮助。

您必须使用新 SignatureV4 的返回值,这是修改后的请求。

$s4 = new SignatureV4("execute-api", $region);
$signedrequest = $s4->signRequest($request, $credentials);

$response = $client->send($signedrequest);

echo $response->getBody();

关于php - 如何使用 PHP SDK 3 从 AWS API Gateway 访问 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514989/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com