Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


HttpHostConnectException: Conexión rechazada de Android

Estoy tratando de conectar a través de HttpPost y enviar un nombre de usuario y contraseña a un sitio web y luego recibir una cadena de ese sitio web. He intentado varios métodos que han trabajado para mí en el pasado pero ahora cuando envío los identificadores del username y de la contraseña los tiempos de la aplicación hacia fuera por tanto tiempo como 4 minutos y después escupe hacia fuera la excepción siguiente:

07-16 16:32:32.897: W/System.err(632): Unable to connect to the server 07-16 16:32:32.907: W/System.err(632): org.apache.http.conn.HttpHostConnectException: Connection to http://devdashboard.company refused 07-16 16:32:32.917: W/System.err(632): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 07-16 16:32:32.917: W/System.err(632): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 07-16 16:32:32.917: W/System.err(632): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 07-16 16:32:32.917: W/System.err(632): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 07-16 16:32:32.917: W/System.err(632): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 07-16 16:32:32.917: W/System.err(632): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 07-16 16:32:32.927: W/System.err(632): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 07-16 16:32:32.927: W/System.err(632): at company.android.dashboard.app.HttpHelperAndroid.sendToHttp(HttpHelperAndroid.java:66) 07-16 16:32:32.927: W/System.err(632): at company.android.dashboard.app.DashboardAppActivity.goToDashboard(DashboardAppActivity.java:62) 07-16 16:32:32.927: W/System.err(632): at java.lang.reflect.Method.invokeNative(Native Method) 07-16 16:32:32.937: W/System.err(632): at java.lang.reflect.Method.invoke(Method.java:511) 07-16 16:32:32.937: W/System.err(632): at android.view.View$1.onClick(View.java:3039) 07-16 16:32:32.947: W/System.err(632): at android.view.View.performClick(View.java:3511) 07-16 16:32:32.947: W/System.err(632): at android.view.View$PerformClick.run(View.java:14105) 07-16 16:32:32.947: W/System.err(632): at android.os.Handler.handleCallback(Handler.java:605) 07-16 16:32:32.957: W/System.err(632): at android.os.Handler.dispatchMessage(Handler.java:92) 07-16 16:32:32.957: W/System.err(632): at android.os.Looper.loop(Looper.java:137) 07-16 16:32:32.967: W/System.err(632): at android.app.ActivityThread.main(ActivityThread.java:4424) 07-16 16:32:32.977: W/System.err(632): at java.lang.reflect.Method.invokeNative(Native Method) 07-16 16:32:32.977: W/System.err(632): at java.lang.reflect.Method.invoke(Method.java:511) 07-16 16:32:32.977: W/System.err(632): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-16 16:32:32.987: W/System.err(632): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 07-16 16:32:32.987: W/System.err(632): at dalvik.system.NativeStart.main(Native Method) 07-16 16:32:32.987: W/System.err(632): Caused by: java.net.ConnectException: failed to connect to /50.19.240.232 (port 80): connect failed: ETIMEDOUT (Connection timed out) 07-16 16:32:32.997: W/System.err(632): at libcore.io.IoBridge.connect(IoBridge.java:114) 07-16 16:32:32.997: W/System.err(632): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 07-16 16:32:32.997: W/System.err(632): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 07-16 16:32:33.007: W/System.err(632): at java.net.Socket.connect(Socket.java:842) 07-16 16:32:33.007: W/System.err(632): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 07-16 16:32:33.017: W/System.err(632): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 07-16 16:32:33.017: W/System.err(632): ... 22 more 07-16 16:32:33.027: W/System.err(632): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out) 07-16 16:32:33.047: W/System.err(632): at libcore.io.Posix.connect(Native Method) 07-16 16:32:33.047: W/System.err(632): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 07-16 16:32:33.047: W/System.err(632): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 07-16 16:32:33.057: W/System.err(632): at libcore.io.IoBridge.connect(IoBridge.java:112) 07-1 6 16:32:33.057: W/System.err(632): ... 27 more 

Permiso de Internet IS habilitado en mi archivo de manifiesto XML

Mi implementación actual es la siguiente:

  String LOGIN = "email@gmail.com"; String PASSWORD ="password1"; //JSONObject to send the username and pw JSONObject json = new JSONObject(); //put the path in the JSONArray object JSONArray vect = new JSONArray(); vect.put("company Android Library"); vect.put("Rocket Ship"); int duration = 50; try { json.put("email", LOGIN); json.put("password", PASSWORD); json.put("json", "true"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d(TAG, "ABOUT TO SEND:" + json.toString()); JSONObject inJson = HttpHelperAndroid.sendToHttp(json, "http://devdashboard.company/login"); if(inJson != null) { Log.d(TAG, "RECIEVED the JSON:" + inJson.toString()); } else Log.d(TAG, "THE RESPONSE WAS NULL"); } 

Y la clase HttpHelperAndroid se ve así:

  public class HttpHelperAndroid { private static final String TAG = "HttpHelperAndroid";//TAG for the LogCat(debugging) private static boolean responseSuccessful = true; /** * sends the JSONObject parameter to the desired URL parameter and gets the response * * @param url the URL to which the JSONObject should be sent * @param jsonObjOut the JSONObject that is to be sent * @return the response from the server as a JSONObject */ public static JSONObject sendToHttp(JSONObject jsonObjOut, String url) { responseSuccessful = true; try { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpRequest = new HttpPost(url); //convert the JSONObject to a string StringEntity se; //set our StringEntity to the JSONObject as a string se = new StringEntity(jsonObjOut.toString()); // Set HTTP params httpRequest.setEntity(se); httpRequest.setHeader("Accept", "application/json"); httpRequest.setHeader("Content-type", "application/json"); httpRequest.setHeader("Accept-Encoding", "gzip"); //for gzip compression //get the current time long oldTime = System.currentTimeMillis(); HttpResponse response = null; try { //execute the http request and get the response response = (HttpResponse) httpClient.execute(httpRequest); } catch(HttpHostConnectException e) { System.err.println("Unable to connect to the server"); e.printStackTrace(); responseSuccessful = false; } //only continue executing if we got a response from the server if(responseSuccessful) { //print how long the response took to the LogCat if it's on Log.i(TAG, "HTTPResponse received in [" + (System.currentTimeMillis()-oldTime) + "ms]"); // Get hold of the response entity (-> the data): HttpEntity entity = response.getEntity(); if (entity != null) { // Read the content stream InputStream in = entity.getContent(); Header contentEncoding = response.getFirstHeader("Content-Encoding"); if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) { in = new GZIPInputStream(in); } // convert content stream to a String String resultString= streamToString(in); //close the stream in.close(); // convert the String into a JSONObject JSONObject jsonObjRecv = new JSONObject(resultString); //take a peak at the JSONObject we got back if the LogCat is on Log.i(TAG,"<JSONObject>\n"+jsonObjRecv.toString()+"\n</JSONObject>"); //return the JSONObject we got back from the server return jsonObjRecv; } } } //catch any exception that was thrown catch (Exception e) { //Print the exception e.printStackTrace(); } return null; } private static String streamToString(InputStream is) { //create a new BufferedReader for the input stream BufferedReader reader = new BufferedReader(new InputStreamReader(is)); //create a new StringBuilder to append the lines StringBuilder sb = new StringBuilder(); //initialize an empty string String line = null; try { //iterate as long as there is still lines to be read while ((line = reader.readLine()) != null) { //append the line and a newline character to our StringBuilder sb.append(line + "\n"); } } //catch an IOException and print it catch (IOException e) { e.printStackTrace(); } //close the stream when we're done finally { try { is.close(); } //catch and print an exception if it's thrown catch (IOException e) { e.printStackTrace(); } } //return the stream converted to a string return sb.toString(); } } 

Y aquí está mi XML sólo para patadas:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="company.android.dashboard.app" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.INTERNET" /> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/company_android_ico" android:label="@string/app_name" > <activity android:name=".DashboardAppActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

He utilizado la clase HttpHelper en proyectos anteriores y ha funcionado para mí, además he intentado implementar esto usando nameValuePairs:

 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("email", "email@gmail.com")); nameValuePairs.add(new BasicNameValuePair("password", "password1")); nameValuePairs.add(new BasicNameValuePair("json", "true")); try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

Y esto produjo el mismo resultado.

¿Podría esto de alguna manera ser un certificado? O quizás algo que ver con un archivo XML corrupto (intenté rehacer el proyecto y el archivo xml) Android HTTP Connection refused ¿ O tal vez algún tipo de problema de archivos de Android hosts?

Estoy abierto a cualquier sugerencia!

He examinado esto desde muchos ángulos y estoy feliz de proporcionar cualquier otra información que sería útil! ¡Realmente aprecio tu tiempo!

NOTA: La url es una URL ficticia, y no la actual a la que me estoy conectando, por razones de seguridad. Soy capaz de curl el sitio web real de la línea de comandos con los parámetros y funciona y también soy capaz de iniciar sesión normalmente desde el navegador web.

EDIT He identificado el problema! Pero no la solución, por desgracia. Así que el problema es que estoy usando una url de servidor dev que no tiene una entrada de dominio en el servidor DNS global. Así que para solucionar esto de alguna manera necesito editar el archivo hosts en mi dispositivo Android / en el emulador … ¿alguien sabe cómo esto se puede hacer de forma legítima?

5 Solutions collect form web for “HttpHostConnectException: Conexión rechazada de Android”

¡He identificado el problema! Así que el problema es que estoy usando una url de servidor dev que no tiene una entrada de dominio en el servidor DNS global.

Así que hay dos soluciones posibles a este problema:

1) Editar el archivo de hosts en el dispositivo Android (requiere enrutar el teléfono): Cómo cambiar el archivo de hosts en android

2) Hacer que el servidor se registre en el servidor DNS global. (También difícil de hacer si no eres responsable de la url)

De todas formas, espero que esto ayude a alguien más también!

Hay algunas posibilidades

1) la url es incorrecta "http://devdashboard.company/login&quot; no está bien. Al menos revise en el navegador. Ping el anfitrión también.

2) Esto debería ser una conexión https en su lugar.

3) hay alguna certificación requerida.

4) Falta un número de puerto. O dominio no se ha configurado correctamente. Tal vez el puerto 80 por defecto es incorrecto?

5) la llamada no debe ser una publicación.

En general, usted es responsable del servidor o no lo es. Parece que es responsabilidad de otros y deberías preguntarles cuál es la url y los parámetros correctos. Así que probablemente no hay ninguna falta, pero es necesario preguntarles sobre la conexión para verificar.

La otra cosa que usted puede hacer es intentar y ver lo que el url parece en una aplicación que conecta con éxito. Echar un vistazo que esto.

El problema es en wifi dormir. Por favor use

 WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL , "MyWifiLock"); wifiLock.acquire(); 

Y permiso:

 uses-permission android:name="android.permission.WAKE_LOCK"; 

Por favor, siga estas soluciones pueden ser entre estos uno resolver su problema.

1> compruebe su archivo del manifiesto permiso del Internet allí o no.

2> compruebe su url con el browser por el cliente del resto y pase la petición apropiada.

3> abra la url en móvil como: – http: // su dirección IP / puerto que es sólo para comprobar si tiene un permiso o no para abrir esta url en móvil.

Esta publicación es antigua, pero es el primer resultado al googlear este error. Encontré la misma excepción, y todo estaba completamente correcto en mi código. Comenté la línea que contenía el permiso de INTERNET en mi AndroidManifest.xml, ejecuté la aplicación, pulsé / pulsé mi botón para enviar la solicitud HTTP y obtener la excepción, cerró la aplicación, volvió al manifiesto, descomentó la línea de permisos, corrió La aplicación de nuevo, y se resolvió la excepción!

Este tipo de bugs en 2015 (y en herramientas "avanzadas" como las últimas herramientas de compilación para Android API 21 y Intellij IDEA 14) me vuelven loco! Se está acercando a su fecha límite, y este tipo de errores completamente interrumpe su trabajo!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.