7

I use Google HTTP Client Library for Java to make simple JSON requests and parse responses. It works well when I don't go through a proxy. But now I'd like to allow my users to use a proxy (with authentication) functionality in my application. I looked in the HttpTransport, HttpRequestFactory and HttpRequestInitializer classes without any success.

I've only slightly modified the examples so far (and mostly it was removing unnecessary code). So where in the code do I add the proxy settings?

static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
static final JsonFactory JSON_FACTORY = new JacksonFactory();

<T> T get(String url, Class<T> type) throws IOException {
    HttpRequestFactory requestFactory =
            HTTP_TRANSPORT.createRequestFactory(new HttpRequestInitializer() {
                @Override
                public void initialize(HttpRequest request) {

                    request.setParser(new JsonObjectParser(JSON_FACTORY));
                }
            });
    HttpRequest request = requestFactory.buildGetRequest(new GenericUrl(url));
    return request.execute().parseAs(type);
}
asheeshr
  • 4,088
  • 6
  • 31
  • 50
Olivier Grégoire
  • 33,839
  • 23
  • 96
  • 137
  • NetHttpTransport seems to be a wrapper for the built in `java.net` HTTP client... so I would guess that you could use the built in system properties to configure a proxy as discussed [here](http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html) – Charlie Jan 10 '13 at 22:25
  • Hmmm... That's annoying. I would have hoped they used other libraries in a completely hidden way, not that some components of it are visible. I might switch to the Apache implementation then. – Olivier Grégoire Jan 11 '13 at 09:09
  • Actually, it's impossible to get there with either Apache or `java.net` because the encapsulation doesn't care about setting the proxy authentication. I'll file a ticket. – Olivier Grégoire Jan 11 '13 at 09:47

1 Answers1

7

This seems to work just fine for an authenticated proxy using google-http-client:1.13.1-beta

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT));
HttpTransport httpTransport = new NetHttpTransport.Builder().setProxy(proxy).build();

Isn't this sufficient for your needs?

William
  • 20,150
  • 8
  • 49
  • 91