【发布时间】:2012-03-08 19:47:24
【问题描述】:
我正在尝试通过我电脑上的 Android 模拟器访问 RESTful Web 服务,该模拟器使用代理连接到互联网。
我的代码工作正常,可以在具有自己的数据连接的实际 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() 调用中为我的服务的 URL 生成一个 UnknownHostException
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 中设置代理
这会为我的 HttpGet 中的 URL 生成 UnknownHostException
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);
我不确定还可以尝试什么。我愿意接受任何建议。
【问题讨论】:
标签: java android web-services proxy