Https使用curl发布请求:Android

我正在尝试使用curl执行https发布请求。 当我执行此请求时,我既没有得到任何响应也没有任何错误或exception。 关于这里出了什么问题的帮助或任何线索表示赞赏。 谢谢。

curl命令行格式:

curl -X POST \ -F 'image=@filename.png;type=image/png' \ -F 'svgz=@filename.svgz;type=image/svg+xml' \ -F 'json={ "text" : "Hello world!", "templateid" : "0010", "timestamp" : "1342683312", "location" : [ 37.7793, -122.4192 ], "facebook" : { "id": "738124695", "access_token": "<VALID_USER_FACEBOOK_TOKEN_WITH_PUBLISH_ACTIONS_PERMISSIONS", "expiration_date": "1342683312" } };type=application/json' \ https://sample.com/api/posts 

Facebook发布代码:

 public static void uploadToFB() { HttpClient client = getNewHttpClient(); HttpPost httpost = new HttpPost("http://sofzh.miximages.com/java/posts); httpost.addHeader(image, filename.png"); httpost.addHeader("svgz", "filename.svgz"); httpost.addHeader("type", "application/json"); httpost.setHeader("Content-type", "application/json"); JSONObject data = new JSONObject(); JSONObject facebook = new JSONObject(); JSONArray location = new JSONArray(); HttpResponse response = null; try { data.put("text","Hello world!"); data.put("templateid","0010"); data.put("timestamp","2012-07-08 09:00:45.312195368+00:00"); location.put(37.7793); location.put( -122.4192); data.put("location", location); facebook.put("id", "738124695"); facebook.put("access_token", "AAADdF92joPABAKmRojBuXZAZAP"+ "qF8ZAxM2bM"+ "UnIErUSYZB85y5vIHAZDZD"); facebook.put("expiration_date", "2013-07-07T 22:00:00Z"); data.put("facebook", facebook); System.out.println(" ---- data ----- "+data); StringEntity stringEntity = new StringEntity(data.toString()); httpost.setEntity(stringEntity); try { response = client.execute(httpost); System.out.println(" --- response --- "+response); HttpEntity entity = response.getEntity(); // If the response does not enclose an entity, there is no need // to worry about connection release if(entity != null) { // A Simple Response Read InputStream instream = entity.getContent(); String result = convertStreamToString(instream); System.out.println(" ---- result ---- "+result); // Closing the input stream will trigger connection release instream.close(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } catch (JSONException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } 

这是一个不受信任的网络,所以,为此,我做了类似于下面的链接。

 private static HttpClient getNewHttpClient() { try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); SSLSocketFactory sf = new MySSLSocketFactory(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); return new DefaultHttpClient(ccm, params); } catch (Exception e) { return new DefaultHttpClient(); } } 

  BufferedReader in = null; StringBuffer sb = new StringBuffer(); BufferedReader inPost = null; try { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httpost = new HttpPost(mURL); httpost.setHeader("Accept","*/*"); httpost.setHeader("Content-Type", "application/x-www-form-urlencoded"); List  nvps = new ArrayList(); nvps.add(new BasicNameValuePair("testkey1", "myvalue1")); nvps.add(new BasicNameValuePair("testkey2", "myvalue2")); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); HttpResponse response = httpclient.execute(httpost); HttpEntity entity = response.getEntity(); inPost = new BufferedReader(new InputStreamReader(entity.getContent())); String linePost = ""; String NLPOST = System.getProperty("line.separator"); while ((linePost = inPost.readLine()) != null) { sb.append(linePost + NLPOST); } inPost.close(); if (entity != null) { entity.consumeContent(); } httpclient.getConnectionManager().shutdown(); 

还有更多关于这个链接.. http://www.softwarepassion.com/android-series-get-post-and-multipart-post-requests/

经过一段艰难时期,我得到了解决问题的方法。 现在,使用MultipartEntity ,我能够将数据发送到服务器,如下所示。

  HttpClient httpClient = getHttpClient(); HttpPost httpost = new HttpPost("http://sofzh.miximages.com/java/posts); MultipartEntity mpEntity = new MultipartEntity(); ContentBody cbFile1 = new FileBody(new File(file.png"), "image/png"); mpEntity.addPart("image", cbFile1); ContentBody cbFile2 = new FileBody(new File("file.svg"), "image/svg+xml"); mpEntity.addPart("svgz", cbFile2); ContentBody cbFile3 = new StringBody(getJsonData().toString(), "application/json", Charset.forName("UTF-8")); mpEntity.addPart("json", cbFile3); httpost.setEntity(mpEntity);