我正在尝试通过https终点发出GET请求,我不确定是否需要任何特殊处理,但下面是我的代码:
String foursquareURL = "https://api.foursquare.com/v2/venues/search?ll=" + latitude + "," + longitude + "&client_id="+CLIENT_ID+"&client_secret="+CLIENT_SECRET;
System.out.println("Foursquare URL is " + foursquareURL);
try {
Log.v("HttpClient", "Preparing to create a request " + foursquareURL);
URI foursquareURI = new URI(foursquareURL);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(new HttpGet(foursquareURI));
content = response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(content));
String strLine;
String result = "";
while ((strLine = br.readLine()) != null) {
result += strLine;
}
//editTextShowLocation.setText(result);
Log.v("result of the parser is", result);
} catch (Exception e) {
Log.v("Exception", e.getLocalizedMessage());
}
答案 0 :(得分:0)
我不确定这种方法是否适用于Android,但我们在服务器端Java中使用带有HTTPS URL的HttpClient看到了同样的问题。以下是我们解决问题的方法:
首先,我们将EasySSLProtocolSocketFactory类的实现复制/改编成我们自己的代码库。你可以在这里找到来源:
使用该类,然后我们使用:
创建新的HttpClient实例HttpClient httpClient = new HttpClient();
mHttpClient = httpClient;
Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", easyhttps);
使用EasySSLProtocolSocketsfactory将允许您的HttpClient在发出请求时忽略任何证书失败/遗漏。
答案 1 :(得分:0)
看看AndroidHttpClient
。它本质上是DefaultHttpClient
的替代品,它会在您创建它时在幕后为您注册一些常用的方案(包括HTTPS)。
然后,您应该能够使用此客户端的实例执行HttpGet
,如果您的URL指示“https”方案,它将为您处理SSL。您不需要乱用注册自己的SSL协议/方案等。