Настройка Eclipse, чтобы позволить Fiddler перехватывать запросы
В Eclipse есть два места, которые я попытался настроить так, чтобы Fiddler мог перехватывать запросы HTTP / HTTPS, которые я отправляю:
Windows > Preference > General > Network Connections- я пробовал Native / Direct / Manual- в аргументах VM я добавляю следующее
-DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888
EDIT: я также попробовал новые свойства, предложенные ргергановым.
Я не касался никаких "сетевых" настроек в Fiddler, и я установил его для мониторинга всех процессов.
Я попробовал с Wireshark и Я смог перехватить запросы без изменений в Eclipse, но информация, представленная в Wireshark, слишком глубока, и мне не нужна большая часть деталей, предоставленных Wireshark.
EDIT: вот пример кода, который я пытаюсь:
public static void doPOST() {
String post_url = "https://lookup.mxtelecom.com/USLookup";
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion( params, HttpVersion.HTTP_1_1 );
HttpProtocolParams.setContentCharset( params, "UTF-8" );
HttpProtocolParams.setUseExpectContinue( params, true );
SchemeRegistry supportedSchemes = new SchemeRegistry();
supportedSchemes.register( new Scheme( "https", SSLSocketFactory.getSocketFactory(), 443 ) );
supportedSchemes.register( new Scheme( "http", PlainSocketFactory.getSocketFactory(), 80 ) );
ClientConnectionManager ccm = new ThreadSafeClientConnManager( params, supportedSchemes );
HttpClient m_Client = new DefaultHttpClient( ccm, params );
HttpPost httpPost = new HttpPost( post_url );
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add( new BasicNameValuePair( "something", "useful" ) );
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
@Override
public String handleResponse( HttpResponse response ) throws ClientProtocolException, IOException {
if ( response.getEntity() != null ) {
return EntityUtils.toString( response.getEntity() );
}
return null;
}
};
try {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity( postParameters, "UTF-8" );
httpPost.setEntity( entity );
results = m_Client.execute( httpPost, responseHandler );
} catch ( ClientProtocolException e ) {
e.printStackTrace();
} catch ( IOException e ) {
e.printStackTrace();
}
}
Eclipse Build id: 20100218-1602 / / 3.5.2.R35x
Может стать использование программы Fiddler2 П2.3.2.6
jdk1.6.0_21
Пожалуйста, дайте мне знать, если вам понадобится какая-либо другая информация.
5 ответов:
HttpClientнеобходимо быть осведомленным о косвенной информации. Можно использовать несколько подходов:Смотрите 2.7 в документации компонента HTTP :
"подключиться к целевому хосту через прокси можно, установив параметр прокси по умолчанию"
DefaultHttpClient httpclient = new DefaultHttpClient(); HttpHost proxy = new HttpHost("127.0.0.1", 8888); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);Использование "стандартного селектора прокси JRE для получения прокси-информации"
DefaultHttpClient httpclient = new DefaultHttpClient(); ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner( httpclient.getConnectionManager().getSchemeRegistry(), ProxySelector.getDefault()); httpclient.setRoutePlanner(routePlanner);И затем добавить следующие аргументы в качестве аргументов VM:
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888Пользовательская реализация
RoutePlanner(я сделал не исследуйте этот вариант)
У вас есть много возможностей настроить прокси в java:
- использование системных свойств
- через аргументы виртуальной машины (предполагая, что вы хотите включить прокси для трафика http и https):
java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888
Через Свойства системы:
// Get system properties Properties sysProperties = System.getProperties(); // Specify proxy settings sysProperties.put("https.proxyHost", "127.0.0.1"); sysProperties.put("https.proxyPort", "8888"); sysProperties.put("http.proxyHost", "127.0.0.1"); sysProperties.put("http.proxyPort", "8889");"дезавуация" этого метода : как только прокси установлен для протокола, все соединения для этого протокола будут использовать прокси
Java. net. Proxy: доступно с в Java 1.5. Позволяет указать конфигурацию прокси-сервера для открытия соединения
SocketAddress addr = new InetSocketAddress("127.0.0.1", 8888); Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); URL url = new URL("http://stackoverflow.com/"); InputStream in = url.openConnection(proxy).getInputStream();Класс ProxySelector: доступен с Java 1.5. позвольте вам выбрать прокси по URI ! Это абстрактный класс, простая реализация, возвращающая ваш прокси для всех соединений http и https выглядит следующим образом:
public static class MyProxySelector extends ProxySelector { private List<Proxy> proxy; private List<Proxy> noProxy; MyProxySelector() { proxy = new ArrayList<Proxy>(); SocketAddress addr = new InetSocketAddress("127.0.0.1", 8888); proxy.add(new Proxy(Proxy.Type.HTTP, addr)); noProxy = new ArrayList<Proxy>(); noProxy.add(Proxy.NO_PROXY); } public List<Proxy> select(URI uri) { System.err.println("Connection to the proxy for uri :"+uri); if (uri == null) { throw new IllegalArgumentException("URI can't be null."); } String protocol = uri.getScheme(); if ("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol)) { //if http or https connection, return our proxy config return proxy; } else { // Otherwise don't use a proxy return noProxy; } } @Override public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { System.err.println("Connection to the proxy failed !"); //throw exception or do some stuff... } }И установите свой прокси-селектор в качестве прокси-селектора по умолчанию
public static void main(String[] args){ ProxySelector.setDefault(new MyProxySelector()); //... }Я предпочитаю этот последний механизм, потому что вы можете поместить некоторые журналы и посмотреть Wat Java делает !
Важное замечание:
По умолчанию Fiddler захватывает только трафик, поступающий из веб-браузеров !! Измените это, чтобы захватить трафик всех процессов: нижняя панель инструментов http://julien.comexis.eu/fiddler.jpg
Кроме того, в Fiddler если вам нужно захватить все процессы из HTTPS-соединения, то вам нужно перейти в меню Сервис-Параметры Fiddler-HTTPS-проверить "расшифровать HTTPS-трафик "и выбрать"...от всех процессов".
Выбор "все процессы" из строки состояния Fiddler, по-видимому, предназначен только для HTTP-соединений.
Можно использовать параметр JVM прокси-хоста и прокси-порта. В то же время, сертификат Fiddler должен быть установлен для sniffer https-соединений.
Comments