使用 libCurl + headers 下载 AWS S3 后无法打开自己的媒体文件
Cannot open own media files after AWS S3 download with libCurl + headers
我已经在 AWS 开发人员论坛上问过这个问题,但没有得到任何回复。所以这里是:
我使用我自己的 libCurl C++ 应用程序从我自己的 AWS S3 存储桶下载我自己的媒体文件。
如果我将一个文件标记为 public 并使用简单的 libCurl GET 请求下载它(没有额外的 headers),下载的文件工作得很好。
但是,如果我将完全相同的文件标记为私有并将 headers 添加到 GET 请求(主机、x-amz-date、x-amz-content-sha256 和授权 Header),我不能打开下载的文件。
我的问题是:
为什么在 GET 请求中添加 headers 会改变下载的文件?
我该怎么做才能解决这个问题?
更新:使用十六进制编辑器我发现,HTTP 响应在开头写入接收到的文件。
我怎样才能防止这种情况发生?
提前致谢!
我找到了解决方案。只需从我的代码中删除这一行:
curl_easy_setopt(curl, CURLOPT_HEADER, true);
最初,我认为这一行可以让我向我的 HTTP 请求添加额外的 headers...
相反,它在输出中包含 HTTP 响应,这是我的问题。
我已经在 AWS 开发人员论坛上问过这个问题,但没有得到任何回复。所以这里是:
我使用我自己的 libCurl C++ 应用程序从我自己的 AWS S3 存储桶下载我自己的媒体文件。
如果我将一个文件标记为 public 并使用简单的 libCurl GET 请求下载它(没有额外的 headers),下载的文件工作得很好。 但是,如果我将完全相同的文件标记为私有并将 headers 添加到 GET 请求(主机、x-amz-date、x-amz-content-sha256 和授权 Header),我不能打开下载的文件。
我的问题是: 为什么在 GET 请求中添加 headers 会改变下载的文件? 我该怎么做才能解决这个问题?
更新:使用十六进制编辑器我发现,HTTP 响应在开头写入接收到的文件。 我怎样才能防止这种情况发生?
提前致谢!
我找到了解决方案。只需从我的代码中删除这一行:
curl_easy_setopt(curl, CURLOPT_HEADER, true);
最初,我认为这一行可以让我向我的 HTTP 请求添加额外的 headers... 相反,它在输出中包含 HTTP 响应,这是我的问题。