3

我正在开发需要发送授权缩短 URL 请求的 GAE 应用程序,因此它们显示在用户http://goo.gl仪表板中。我正在使用 Google URL Shorter API for Java library (google-api-services-urlshortener-v1-rev12-1.12.0-beta.jar) 以下方式:

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException {

    Urlshortener shortener = newUrlshortener();
    Url toInsert = new Url().setLongUrl("http://www.google.com");
    Url inserted = new Url();
    try {
         inserted = shortener.url().insert(toInsert).setOauthToken("{accessToken}").execute();
      } catch (Exception e) {
     resp.sendError(404, e.getMessage());
      }

  }

public static Urlshortener newUrlshortener() {
    AppIdentityCredential credential =
        new AppIdentityCredential(Arrays.asList(UrlshortenerScopes.URLSHORTENER));
    return new Urlshortener.Builder(new UrlFetchTransport(), new JacksonFactory(), credential)
        .build();
  }

我的请求得到处理,我可以检索短 URL,但它没有显示在用户http://goo.le仪表板中。

我可以使用 curl 来做到这一点,并且它可以正常工作。请求显示在用户仪表板中:

curl https://www.googleapis.com/urlshortener/v1/url  -H 'Content-Type: application/json' -H 'Authorization: Bearer {sameAccessToken}'  -d '{"longUrl": "http://www.google.com/"}'

我也尝试将 Authorization HttpHeader 添加到请求中,但它没有用:

HttpHeaders headers = new HttpHeaders();
        headers.put("Authorization", "Bearer {sameAccessToken}");
        inserted = shortener.url().insert(toInsert).setRequestHeaders(headers).execute();
4

1 回答 1

1

我一直在做错事。

正确的方法是使用 setAccessToken() 方法创建 Credential 对象并设置访问令牌。

public static Urlshortener newUrlshortener() {

    Credential credential = new Credential();
    credential.setAccessToken("{accessToken}");
    return new Urlshortener.Builder(new UrlFetchTransport(), new JacksonFactory(), credential)
    .build();

}
于 2013-05-06T21:55:21.300 回答