Android:从https网址获取回复

时间:2010-11-20 15:06:25

标签: android post https

问候,

我正在开发一款Android应用,需要通过https打开一个网址(带有POST参数)并获得响应。

我有一个自签名证书的额外复杂性。我还需要接受cookies。

任何人都对从哪里开始有任何想法?

非常感谢,

2 个答案:

答案 0 :(得分:17)

Android自带了apache commons http库。 设置https发布请求非常简单:

HttpPost post = new HttpPost("https://yourdomain.com/yourskript.xyz");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("postValue1", "my Value"));
nameValuePairs.add(new BasicNameValuePair("postValue2", "2nd Value"));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();

String responseText = EntityUtils.toString(entity);

Android使用commons http库的4.x版本,因为4.0以下的所有版本都在其生命周期之外。

我无法确切地知道如何向HttpClient注册自签名证书,但mybe the commons http文档有帮助:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506

答案 1 :(得分:3)

我设法让所有这些都与cookie和未签名的https同步。

我在这里使用了代码:

http://masl.cis.gvsu.edu/2010/04/05/android-code-sample-asynchronous-http-connections/

并使用Brian Yarger的代码修改为未签名的https:

Self-signed SSL acceptance on Android

(将上面的代码添加到HttpConnection.java中run()的开头)

为了让cookie工作,我不得不修改一些代码(来自HttpConnection.java的POST片段):

         case POST:
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new StringEntity(data));
            httpPost.addHeader("Cookie", Cookie.getCookie());
            response = httpClient.execute(httpPost);

            Header[] headers=response.getAllHeaders();
            for(int i=0;i<headers.length;i++){
                if(headers[i].getName().equalsIgnoreCase("Set-Cookie")){
                    //Log.i("i",headers[i].getName()+"---"+headers[i].getValue());
                    Cookie.setCookie(headers[i].getValue());
                    break;
                }
            }
            break;

非常感谢大家指点我的方向,