2010-12-21 3 views
13

DefaultHttpClient 개체를 만들고 웹 페이지를 방문하려고하면 설정에서 지정한 프록시를 통해 요청이 라우팅되지 않습니다.Android HttpClient가 시스템 프록시 설정을 사용하지 않습니다.

API를 통해 보면 안드로이드는 시스템의 프록시 설정을 읽을 수있는 Proxy 클래스를 가지고 있지만 프록시를 지정할 수있는 곳은 어디에도 없습니다.

HttpClient에서 프록시 설정을 사용할 수있는 방법이 있습니까?

+0

경로를 형성하기 위해 파라미터로서 프록시 호스트 소요 HttpRoute''의 생성자가있다 .. 하지만 그것을 사용하는 HttpClient를 만드는 방법을 알지 못합니다. http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html –

+0

그래, 나는 또한 그것을 보았지만 어떻게 연결 하는지를 알 수 없었다. – Cristian

+1

Oooh ..이 대답을 보았습니까? http://stackoverflow.com/questions/2539669/android-unable-to-make-httprequest-behind-firewall/2542928#2542928 –

답변

23

보십시오 :

( here에서 발췌)
DefaultHttpClient httpclient = new DefaultHttpClient(); 

HttpHost proxy = new HttpHost("someproxy", 8080); 
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

+3

perfekt하지만 (다른) Proxys 또는 No를 사용할 수있는 장치의 Webrequests를 처리해야합니다. 프록시 설정, 거기에 사용자가 proxysettings 있었는지 알아낼 가능성이 있습니까? 내 고객 중 일부는 다른 폐쇄 된 사용자 그룹을 사용하고 있습니다. – 2red13

+0

시스템에서 적절한 프록시를 얻으려면이 답변을 확인하십시오. http://stackoverflow.com/questions/10811698/getting-wifi-proxy-settings-in-android/13616054#13616054 – Adam

+0

연결하는 데 너무 많은 시간이 소요됩니다. 매개 변수를 설정 한 후 프록시를 지정하십시오. 내 애플 리케이션에서 나는 많은 https 요청을 가지고 있고 각 인스턴스는 프록시와 연결하는데 오랜 시간이 걸린다. 더 나은 해결책이 있습니까? –

3

내가 추상적으로 모든 안드로이드 버전에 대한 프록시 설정에 대한 액세스를 시도 Android Proxy Library을 개발하고 있어요. 사용자가 현재 선택한 프록시 설정을 쉽게 가져올 수 있습니다.

+0

링크가 404를 제공하고 https://github.com/shouldit/android- 프록시? –

+0

네, 고마워요. 고쳤다. – lechuckcaptain

9

먼저, 요청이 Android 기기의 설정에서 지정한 프록시 설정 속성을 준수하는지 확인합니다. android.provider.Settings에서 System 클래스를 살펴보면 코드를 통해이를 확인할 수 있습니다. 사용자가 시스템 프록시 설정이 있다면

는 다음을 수행 할 수 있습니다, 확인하려면 : 당신이 DefaultHTTPClient의 인스턴스가있는 경우, 당신은 그것뿐만 아니라 관련 프록시 설정이 있는지 여부를 확인할 수 있습니다

System.getProperty("http.proxyHost"); 
    System.getProperty("http.proxyPort"); 

    System.getProperty("https.proxyHost"); 
    System.getProperty("https.proxyPort"); 

.

DefaultHttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY); 

이러한 프록시 설정을 '얻을'모든 방법이 있습니다, 그리고 '설정'방법 중 하나 System.setProperty를 또는 httpclient.setParams을 통해, 같은 방식으로 구현됩니다.

희망이 도움이되었습니다!

+0

프록시 설정에서 오류가 발생하거나 프록시 서버가 다운 된 경우 이러한 상황을 처리하는 방법 – Pratswinz

1

보십시오

System.setProperty("http.proxyHost", <your proxy host name>); 
System.setProperty("http.proxyPort", <your proxy port>); 

또는

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpHost httpproxy = new HttpHost("<your proxy host>",<your proxy port>); 
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, httpproxy); 

또는

HttpHost proxy = new HttpHost("ip address",port number); 
DefaultHttpClient httpclient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy); 

HttpPost httpost = new HttpPost(url); 
List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
nvps.add(new BasicNameValuePair("param name", param)); 
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.ISO_8859_1)); 
HttpResponse response = httpclient.execute(httpost); 

HttpEntity entity = response.getEntity(); 
System.out.println("Request Handled?: " + response.getStatusLine()); 
InputStream in = entity.getContent(); 
httpclient.getConnectionManager().shutdown(); 
+0

프록시 설정에서 오류가 발생하거나 프록시 서버가 다운 된 경우 어떻게되는지, 이러한 상황을 처리하는 방법 – Pratswinz

관련 문제