如何通过http客户端执行https get请求?

时间:2011-11-12 19:11:41

标签: java android httpclient

我正在尝试通过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());
              }

2 个答案:

答案 0 :(得分:0)

我不确定这种方法是否适用于Android,但我们在服务器端Java中使用带有HTTPS URL的HttpClient看到了同样的问题。以下是我们解决问题的方法:

首先,我们将EasySSLProtocolSocketFactory类的实现复制/改编成我们自己的代码库。你可以在这里找到来源:

http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/trunk/src/contrib/org/apache/commons/httpclient/contrib/ssl/EasySSLProtocolSocketFactory.java?view=markup

使用该类,然后我们使用:

创建新的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协议/方案等。