gpt4 book ai didi

php - 检查文件是否存在于 Amazon s3 签名 URL 上

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:47 25 4
gpt4 key购买 nike

我为 Amazon s3 创建了一个签名的 $URL,它可以在浏览器中完美打开。

http://testbucket.com.s3.amazonaws.com/100-game-play-intro-1.m4v?AWSAccessKeyId=AKIAJUAjhkhkjhMO73BF5Q&Expires=1378465934&Signature=ttmsAUDgJjCXepwEXvl8JdFu%2F60%3D

**此示例中更改了存储桶名称和访问 key

然而,我正在尝试使用下面的函数来检查(使用 curl)文件是否存在。它使 CURL 连接失败。如果我将上面的 $URL 替换为 s3 之外的图像的 url,则此代码可以完美运行。

我知道该文件存在于 amazon 中,但无法弄清楚为什么如果使用上述签名的 url,此代码会失败

有什么想法吗?

谢谢

这是我的代码。

function remoteFileExists($url) {

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

//don't fetch the actual file, only get header to check if file exists
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, true);

$result = curl_exec($ch);
curl_close($ch);



if ($result !== false) {

$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($statusCode == 200) {
$ret = true;
} else {
$ret = false;
}

} else {
$ret='connection failed';
}

return $ret;

}

最佳答案

使用 CURLOPT_NOBODY 时, libcurl 发送 HTTP HEAD 请求,而不是 GET 请求。

...the string to be signed is formed by appending the REST verb, content-md5 value, content-type value, expires parameter value, canonicalized x-amz headers (see recipe below), and the resource; all separated by newlines.

http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html

“REST 动词”——例如,GETHEAD——必须在您生成的签名和发出的请求之间保持一致,因此签名对 GET 有效将对 HEAD 无效,反之亦然。

您需要签署 HEAD 请求而不是 GET 请求才能以这种方式验证文件。

关于php - 检查文件是否存在于 Amazon s3 签名 URL 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635216/

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