我試圖通過我的PC上的Android模擬器訪問RESTful Web服務,該模擬器使用代理連接到互聯網。使用HttpGet通過代理訪問RESTful Web服務的Android模擬器
我的代碼工作正常訪問具有與下面的代碼它自己的數據連接的實際Android設備上的Web服務:
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
HttpGet request = new HttpGet("http://mytesturl.com/services/serviceName");
UsernamePasswordCredentials creds =
new UsernamePasswordCredentials("username", "password");
request.addHeader(BasicScheme.authenticate(creds, "UTF-8", false));
HttpResponse response = client.execute(request);
我已經嘗試了多種方法來嘗試獲得模擬器允許通過代理進行連接,但沒有任何工作。
注意,我有在AndroidManifest.xml中啓用了INTERNET:
<uses-permission android:name="android.permission.INTERNET" />
嘗試1 - 設置屬性:
這在execute()調用產生一個UnknownHostException爲我服務的URL
Properties props = System.getProperties();
props.put("http.proxyHost", "httpproxy.mycompany.com");
props.put("http.proxyPort", "80");
嘗試2 - 設置在DefaultHttpClient代理:
這將產生一個UnknownHostException的實際代理
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
HttpHost proxy = new HttpHost("httpproxy.mycompany.com", 80);
client.getCredentialsProvider().setCredentials(
new AuthScope("httpproxy.mycompany.com", 80),
new UsernamePasswordCredentials("username", "password"));
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
HttpGet request = new HttpGet("http://mytesturl.com/services/serviceName");
UsernamePasswordCredentials cred =
new UsernamePasswordCredentials("username", "password");
request.addHeader(BasicScheme.authenticate(cred, "UTF-8", false));
HttpResponse response = client.execute(request);
嘗試3 - 設置在HTTPGET
代理這將產生一個UnknownHostException的URL在我HTTPGET
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
HttpGet request = new HttpGet("http://mytesturl.com/services/serviceName");
UsernamePasswordCredentials cred =
new UsernamePasswordCredentials("username", "password");
request.addHeader(BasicScheme.authenticate(cred, "UTF-8", false));
Header bs = new BasicScheme().authenticate(
new UsernamePasswordCredentials("username", "password"),
request);
request.addHeader("Proxy-Authorization", bs.getValue());
HttpResponse response = client.execute(request);
我不知道還有什麼要嘗試。我願意接受任何建議。
感謝您的建議。我確實嘗試過這些,但模擬器仍然無法連接。 – 2012-03-09 16:45:58