HttpHostConnectException: подключение отказалось от Android

Я пытаюсь подключиться через HttpPost и отправить имя пользователя и пароль на веб-сайт, а затем получить строку с этого веб-сайта. Я пробовал различные методы, которые работали для меня в прошлом, но теперь, когда я отправляю идентификаторы имени пользователя и пароля, приложение истекает до 4 минут, а затем выплевывает следующее исключение:

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 

Разрешение доступа к Интернету включено в файле манифеста XML

Моя текущая реализация выглядит следующим образом:

  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"); } 

И класс HttpHelperAndroid выглядит так:

  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(); } } 

И вот мой XML просто для ударов:

 <?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> 

Я использовал класс HttpHelper в прошлых проектах, и он работал для меня, кроме того, я попытался реализовать это с помощью 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)); 

И это дало тот же результат.

Может ли это как-то стать сертификатом? Или, возможно, что-то связанное с поврежденным XML-файлом (я попытался переделать проект и файл xml). Отказано в HTTP-HTTP-соединении или, может быть, какая-то проблема с файлами Android-хостов?

Я открыт для любых предложений!

Я изучил это из-за большого количества углов, и я рад предоставить любую другую информацию, которая была бы полезна! Я очень ценю ваше время!

ПРИМЕЧАНИЕ . URL-адрес – это фиктивный URL-адрес, а не фактический, к которому я подключаюсь, по соображениям безопасности. Я могу скручивать фактический веб-сайт из командной строки с параметрами, и он работает, и я также могу нормально войти в систему из веб-браузера.

EDIT Я определил проблему! Но не к сожалению. Поэтому проблема заключается в том, что я использую URL-адрес dev-сервера, который не имеет записи домена на глобальном DNS-сервере. Поэтому, чтобы исправить это, мне как-то нужно отредактировать файл hosts на моем устройстве Android / в эмуляторе … кто-нибудь знает, как это можно сделать законным образом?

Solutions Collecting From Web of "HttpHostConnectException: подключение отказалось от Android"

Я определил проблему! Поэтому проблема заключается в том, что я использую URL-адрес dev-сервера, который не имеет записи домена на глобальном DNS-сервере.

Таким образом, есть два возможных решения этой проблемы:

1) Редактирование файла хостов на устройстве Android (требуется укоренение телефона): как изменить файл hosts на android

2) Получение сервера, зарегистрированного на глобальном DNS-сервере. (Также трудно сделать, если вы не несете ответственность за URL-адрес)

В любом случае, я надеюсь, что это тоже поможет кому-то другому!

Есть несколько возможностей

1) неправильный URL-адрес «http://devdashboard.company/login&#xBB; неверен. По крайней мере, проверьте браузер. Ping и хост.

2) Это должно быть соединение https.

3) требуется некоторая сертификация.

4) Вам не хватает номера порта. Или домен неправильно настроен. Возможно, порт 80 по умолчанию неверен?

5) вызов не должен быть сообщением.

В общем, вы либо ответственны за сервер, либо нет. Похоже, что это некоторая ответственность elses, и вы должны спросить их, каков правильный URL-адрес и параметры. Поэтому, вероятно, нет ошибок, но вы должны спросить их о соединении для проверки.

Другая вещь, которую вы можете сделать, – попробовать и посмотреть, как выглядит URL-адрес в приложении, которое успешно соединяется. Посмотрите, что это.

Проблема заключается в спящем wifi. Пожалуйста, используйте

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

И разрешение:

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

Пожалуйста, следуйте этим решениям, возможно, среди них одна проблема.

1> Проверьте, есть ли в вашем файле доступ к файлу манифеста или нет.

2> проверьте свой URL-адрес в браузере клиентом отдыха и передайте соответствующий запрос.

3> откройте url на мобильном телефоне, например: http: // ваш IP-адрес / порт, который предназначен только для проверки, есть ли у вас разрешение или нет, чтобы открыть этот URL-адрес на мобильном устройстве.

Этот пост является старым, но это первый результат при поиске этой ошибки. Я столкнулся с тем же самым исключением, и все было совершенно правильно в моем коде. Я прокомментировал строку, содержащую разрешение INTERNET, в моем AndroidManifest.xml, запустил приложение, нажал / постучал по моей кнопке, чтобы отправить HTTP-запрос, получить исключение, закрыть приложение, вернуться к манифесту, раскомментировать строку разрешений, запустить Приложение снова, и исключение было разрешено!

Подобные ошибки в 2015 году (и в «продвинутых» инструментах, таких как новейшие инструменты компиляции для Android API 21 и Intellij IDEA 14) приводят меня в бешенство! Вы приближаетесь к своему крайнему сроку, и подобные ошибки полностью нарушают вашу работу!