如何使用Google URL Shortener API for Java授权URL缩短请求

时间:2013-05-05 19:31:49

标签: java google-api-java-client google-url-shortener

我正在开发需要发送授权缩短网址请求的GAE应用,因此它们会显示在用户http://goo.gl信息中心内。我正在使用Google URL缩短API for Java库(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();
  }

我的请求得到处理,我可以检索短网址,但不会显示在用户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/"}'

我还尝试添加授权HttpHeader来请求,但它不起作用:

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

1 个答案:

答案 0 :(得分:1)

我一直都做错了。

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

public static Urlshortener newUrlshortener() {

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

}