2013-01-10 2 views
4

Я использую клиентскую библиотеку Google HTTP для Java, чтобы делать простые запросы JSON и анализировать ответы. Он работает хорошо, когда я не прохожу через прокси. Но теперь я хочу разрешить моим пользователям использовать в моем приложении функцию прокси (с проверкой подлинности). Я не смотрел в классах HttpTransport, HttpRequestFactory и HttpRequestInitializer.Использование прокси-серверов с клиентской библиотекой Google HTTP для Java

Я пока только немного изменил примеры (и в основном он удалял ненужный код). Итак, где в коде я добавляю настройки прокси-сервера?

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); 
} 
+0

NetHttpTransport - это оболочка для встроенного HTTP-клиента java.net. Поэтому я бы предположил, что вы можете использовать встроенные системные свойства для настройки прокси-сервера, как обсуждалось [здесь] (http: // docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html) – Charlie

+0

Хммм ... Это раздражает. Я бы надеялся, что они использовали другие библиотеки в полностью скрытом виде, а не в том, что некоторые его компоненты видны. Тогда я могу переключиться на реализацию Apache. –

+0

На самом деле, невозможно попасть туда с Apache или 'java.net', потому что инкапсуляция не заботится о настройке прокси-аутентификации. Я отправлю билет. –

ответ

5

Это, кажется, работает очень хорошо для прошедшего проверку подлинности прокси-сервера с помощью Google-HTTP-клиент: 1.13.1 бета-

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

Разве это не достаточно для ваших нужд?

+0

Нет. Мне нужно указать имя пользователя и пароль для прохождения. Этот фрагмент не дает этого варианта, извините. Плюс, этот код - это то, что я пробовал между моими двумя моими комментариями по моему вопросу. –

+0

Значит, вам нужно использовать учетные данные, отличные от учетных данных системы, в которую вы вошли? – William

+0

Да, мои учетные данные отличаются от моей системы и моего прокси. –