2013-06-03 52 views
3

我试图连接到身份验证并连接到一个安全的服务器,但它失败并吐至Throwable t。这里是我的HTTP连接的代码通过http连接到安全的服务器android

  // Log.i(getClass().getSimpleName(), "send task - start"); 
      HttpParams httpParams = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParams, 
        15000); 
      HttpConnectionParams.setSoTimeout(httpParams, 15000); 
      // 
      HttpParams p = new BasicHttpParams(); 
      // p.setParameter("name", pvo.getName()); 
      p.setParameter("user", "1"); 

      // Instantiate an HttpClient 
      HttpClient httpclient = new DefaultHttpClient(p); 
      UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(":jeunes-caisse-depargne", "HREwFdin3r6Y"); 
      ((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), credentials); 

      String url = "http://www.1.json"; 
      HttpPost httppost = new HttpPost(url); 

      // Instantiate a GET HTTP method 
      try { 
       Log.i(getClass().getSimpleName(), "send task - start"); 
       // 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
         2); 
       nameValuePairs.add(new BasicNameValuePair("user", "1")); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
       String responseBody = httpclient.execute(httppost, 
         responseHandler); 
       // Parse 
       JSONObject json = new JSONObject(responseBody); 
       JSONArray jArray = json.getJSONArray("posts"); 
       ArrayList<HashMap<String, String>> mylist = 
         new ArrayList<HashMap<String, String>>(); 

       for (int i = 0; i < jArray.length(); i++) { 
        HashMap<String, String> map = new HashMap<String, String>(); 
        JSONObject e = jArray.getJSONObject(i); 
        String s = e.getString("post"); 
        JSONObject jObject = new JSONObject(s); 


        map.put("UserName", jObject.getString("xxxxx")); 
        map.put("FullName", jObject.getString("xxxxxx")); 

        mylist.add(map); 
       } 
       Toast.makeText(this, responseBody, Toast.LENGTH_LONG).show(); 

      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      // Log.i(getClass().getSimpleName(), "send task - end"); 

     catch (Throwable t) { 
      Toast.makeText(this, "Request failed: " + t.toString(), 
        Toast.LENGTH_LONG).show(); 
     } 

更新:chintan-khetiya回答我这样做,但我得到了一个日志警告

HttpClient client = new DefaultHttpClient(); 
       HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit 
       HttpResponse response; 
       JSONObject json = new JSONObject(); 

       try { 
       HttpPost post = new HttpPost("depargne.fr...."); 
       json.put("user_name", "xxxx"); 
       json.put("password", "xxx"); 
       StringEntity se = new StringEntity(json.toString()); 
       se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
       post.setEntity(se); 
       response = client.execute(post); 

       /*Checking response */ 
       if(response!=null){ 
       is = response.getEntity().getContent(); //Get the data in the entity 
       } 


       try 
       { 
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
        StringBuilder sb = new StringBuilder(); 
        String line = null; 
        while ((line = reader.readLine()) != null) 
        { 
         sb.append(line + "\n"); 
        } 
        is.close(); 
        result = sb.toString(); 
        System.out.println("Result: "+result); 
       } 
       catch (Exception e) 
       { 
        Log.e("Loading Runnable Error converting result :", e.toString()); 
       } 


       } catch(Exception e) { 
       e.printStackTrace(); 
       //createDialog("Error", "Cannot Estabilish Connection"); 
       } 

登录警告:

06-03 12:05:38.703: W/System.err(13696): java.net.UnknownHostException: .fr 
06-03 12:05:38.703: W/System.err(13696): at java.net.InetAddress.lookupHostByName(InetAddress.java:506) 
06-03 12:05:38.703: W/System.err(13696): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294) 
06-03 12:05:38.707: W/System.err(13696): at java.net.InetAddress.getAllByName(InetAddress.java:256) 
06-03 12:05:38.707: W/System.err(13696): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 
06-03 12:05:38.707: W/System.err(13696): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
06-03 12:05:38.707: W/System.err(13696): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
06-03 12:05:38.707: W/System.err(13696): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 
06-03 12:05:38.707: W/System.err(13696): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
06-03 12:05:38.707: W/System.err(13696): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
06-03 12:05:38.707: W/System.err(13696): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
06-03 12:05:38.707: W/System.err(13696): at tionce.app.MainActivity.onClick(MainActivity.java:122) 
06-03 12:05:38.707: W/System.err(13696): at android.view.View.performClick(View.java:2538) 
06-03 12:05:38.707: W/System.err(13696): at android.view.View$PerformClick.run(View.java:9152) 
06-03 12:05:38.707: W/System.err(13696): at android.os.Handler.handleCallback(Handler.java:587) 
06-03 12:05:38.707: W/System.err(13696): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-03 12:05:38.707: W/System.err(13696): at android.os.Looper.loop(Looper.java:130) 
06-03 12:05:38.707: W/System.err(13696): at android.app.ActivityThread.main(ActivityThread.java:3687) 
06-03 12:05:38.707: W/System.err(13696): at java.lang.reflect.Method.invokeNative(Native Method) 
06-03 12:05:38.707: W/System.err(13696): at java.lang.reflect.Method.invoke(Method.java:507) 
06-03 12:05:38.707: W/System.err(13696): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
06-03 12:05:38.710: W/System.err(13696): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
06-03 12:05:38.710: W/System.err(13696): at dalvik.system.NativeStart.main(Native Method) 

我更换

HttpParams httpParams = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParams, 
        15000); 
      HttpConnectionParams.setSoTimeout(httpParams, 15000); 

DefaultHttpClient client = new DefaultHttpClient(); 
     client.getCredentialsProvider().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user1", "user1")); 
     client.addRequestInterceptor(new HttpRequestInterceptor() { 
      public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { 
       AuthState state = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE); 
       if (state.getAuthScheme() == null) { 
        BasicScheme scheme = new BasicScheme(); 
        CredentialsProvider credentialsProvider = (CredentialsProvider) context.getAttribute(ClientContext.CREDS_PROVIDER); 
        org.apache.http.auth.Credentials credentials = credentialsProvider.getCredentials(AuthScope.ANY); 
        if (credentials == null) { 
         throw new HttpException(); 
        } 
        state.setAuthScope(AuthScope.ANY); 
        state.setAuthScheme(scheme); 
        state.setCredentials(credentials); 
       } 
      } 
     }, 0); // 0 = first, and you really want to be first. 

但警告错误仍时有发生,仍然没有任何反应。

+0

你能分享异常详情吗? – gunar

+0

查看[Here](http://stackoverflow.com/questions/13134019/http-post-method-passing-null-values-to-the-server/13134287#13134287)&[Here](http:// chintankhetiya.wordpress.com/) –

+0

chintankhetiya请在应用您的解决方案和@gunar后查看我的更新。检查更新的示例我得到了一个警告,但没有回应 – Dimitri

回答

2

异常细节看起来很直接:java.net.UnknownHostException: 该URL似乎是错误的。你可以在PC浏览器中打开网址吗?

+0

该网址是好的,但它可以是用户名和密码吗? – Dimitri

+0

我只是试图在浏览器(Chrome)中打开'http://www.jeunes-caisse-depargne.fr/',我得到了404。也许网址对您来说是可访问的,因为您在Intranet中,但是该设备不是? – gunar

+0

这会有帮助吗? http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html – gunar