Ste*_*ugh 5 php curl amazon-s3 amazon-web-services
我为Amazon s3创建了一个签名的$ URL,它在浏览器中完美打开.
http://testbucket.com.s3.amazonaws.com/100-game-play-intro-1.m4v?AWSAccessKeyId=AKIAJUAjhkhkjhMO73BF5Q&Expires=1378465934&Signature=ttmsAUDgJjCXepwEXvl8JdFu%2F60%3D
Run Code Online (Sandbox Code Playgroud)
**此示例中更改了存储桶名称和访问密钥
然而,我试图使用下面的函数来检查(使用curl)该文件是否存在.它未通过CURL连接.如果我用s3之外的图像的url替换上面的$ 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;
}
Run Code Online (Sandbox Code Playgroud)
使用CURLOPT_NOBODY时,libcurl 发送 HTTPHEAD请求,而不是GET请求。
\n\n...要签名的字符串是通过附加REST 动词、content-md5 值、content-type 值、过期参数值、规范化的 x-amz 标头(请参阅下面的配方)和资源形成的;全部由换行符分隔。
\n\xe2\x80\x94 http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html
\n
“REST 动词”(例如,GETvs HEAD)必须在您生成的签名和发出的请求之间保持一致,因此有效的签名GET将无效HEAD,反之亦然。
您需要签署一个HEAD请求而不是一个GET请求才能以这种方式验证文件。
| 归档时间: |
|
| 查看次数: |
2390 次 |
| 最近记录: |