2

アプリケーションで共有されている画像の contentUrl にアクセスしようとすると、ステータス コード 401 が返されます。

これは私に返された contentUrl です:

" https://www.googleapis.com/mirror/v1/timeline/4ba66392-b8a0-4fa8-9c66-afa483881582/attachments/ps:5874927624199854018?alt=media "

これらはヘッダーです:

cache-control →プライベート、max-age=0

コンテンツエンコーディング→gzip

コンテンツの長さ→34

content-type →text/html; 文字セット=UTF-8

日付 →2013/05/06(月) 22:39:28 GMT

有効期限 → 2013 年 5 月 6 日(月)22:39:28 GMT

サーバー→GSE

状態 →401 無許可

バージョン →HTTP/1.1

www-authenticate →Bearer realm="https://www.google.com/accounts/AuthSubRequest"

x-content-type-options →nosniff

x-frame-options →SAMEORIGIN

x-xss-保護 →1; モード=ブロック

これはバグですか?contentType がアクセス可能であると信じさせるように、実際に jpeg にアクセスするにはどうすればよいですか?

4

2 に答える 2

3

添付ファイルは、タイムライン アイテムなどの他のエンティティと同じ方法で OAuth 2.0 によって保護されます。それらにアクセスするには、有効な OAuth アクセス トークンを提供する必要があります。

デフォルトでは、この URL へのリクエストは添付ファイルのメタデータを返します。バイトが必要な場合はmedia、GET パラメータを追加して応答形式として指定する必要がありますalt=media。公式のクライアント ライブラリは、このためのラッパーを提供します。

リファレンス ドキュメントクイック スタート プロジェクトには、いくつかの言語での例があります。これらのソースからコピーしたいくつかの注目すべきものを次に示します。

生の 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;
  }
}

パイソン:

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
于 2013-05-06T23:22:51.690 に答える