当我尝试访问与我的应用程序共享的图像的contentUrl时,我得到状态代码401.
这是contentUrl返回给我的:
这些是标题:
cache-control→private,max-age = 0
content-encoding→gzip
content-length→34
content-type→text / html;字符集= UTF-8
日期→2013年5月6日星期一22:39:28 GMT
到期→2013年5月6日星期一22:39:28 GMT
服务器→GSE
状态→401未经授权
版本→HTTP / 1.1
www-authenticate→Bearer 境界= “https://www.google.com/accounts/AuthSubRequest”
x-content-type-options→nosniff
x-frame-options→SAMEORIGIN
x-xss-protection→1;模式=块
这是一个错误吗?我如何实际访问jpeg,因为contentType让我相信可以访问?
答案 0 :(得分:3)
附件受OAuth 2.0保护,其方式与时间轴项目等其他实体相同。要访问它们,您必须提供有效的OAuth访问令牌。
默认情况下,对此URL的请求会返回附件元数据。如果您想要字节,则必须通过添加GET参数media
来指定alt=media
作为响应格式。官方客户端库为此提供包装。
reference docs和quick start projects中有多种语言的示例。以下是我从这些来源中复制的一些值得注意的内容:
原始HTTP:
GET /mirror/v1/timeline/{timeline item id}/attachments/{attachment id}?alt=media HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
<强>爪哇:强>
/**
* Download a timeline items's attachment.
*
* @param service Authorized Mirror service.
* @param itemId ID of the timeline item to download the attachment for.
* @param attachment Attachment to download content for.
* @return The attachment content on success, {@code null} otherwise.
*/
public static InputStream downloadAttachment(Mirror service, String itemId,
Attachment attachment) {
try {
HttpResponse resp =
service.getRequestFactory()
.buildGetRequest(new GenericUrl(attachment.getContentUrl()))
.execute();
return resp.getContent();
} catch (IOException e) {
// An error occurred.
e.printStackTrace();
return null;
}
}
<强> PHP:强>
/**
* Download an attachment's content.
*
* @param string $timelineId ID of the timeline item the attachment belongs to.
* @param Google_Attachment $attachment Attachment's metadata.
* @return string The attachment's content if successful, null otherwise.
*/
function downloadAttachment($itemId, $attachment) {
$request = new Google_HttpRequest(
$attachment->getContentUrl(), 'GET', null, null);
$httpRequest = Google_Client::$io->authenticatedRequest($request);
if ($httpRequest->getResponseHttpCode() == 200) {
return $httpRequest->getResponseBody();
} else {
// An error occurred.
return null;
}
}
<强>的Python:强>
def download_attachment(service, attachment):
"""Download an attachment's content
Args:
service: Authorized Mirror service.
attachment: Attachment's metadata.
Returns:
Attachment's content if successful, None otherwise.
"""
resp, content = service._http.request(attachment['contentUrl'])
if resp.status == 200:
return content
else:
print 'An error occurred: %s' % resp
return None
答案 1 :(得分:1)
如果您查看“访问附件”部分下的https://developers.google.com/glass/timeline,则说明
注意:附件内容受OAuth 2.0保护,就像对API端点的其他调用一样。 Google API客户端库使用媒体下载功能提供对附件二进制内容的访问。
使用此库来说明Java库,其他库也可以使用类似的方法。这与https://developers.google.com/glass/v1/reference/timeline/attachments/get
中所示的方法不同