2012-07-16 4 views
6

HttpPost를 통해 연결하고 웹 사이트에 사용자 이름과 암호를 보내고 해당 웹 사이트에서 문자열을 수신하려고합니다. 나는 과거에 나를 위해 일하지만 지금은 한 다양한 방법을 시도 나는 한 4 등 분 동안 응용 프로그램 타임 아웃 사용자 이름과 암호 식별자를 전송 한 후 다음과 같은 예외가 밖으로 뱉어 때HttpHostConnectException : 연결이 거부되었습니다. Android

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 protected]"; 
     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 클래스는 그래서 다음과 같습니다

,691,363 내가 과거 프로젝트에서 HttpHelper 클래스를 사용하고 나를 위해 일했다

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

, 나는이 사용 NameValuePair의 구현을 시도뿐만 아니라 :

그리고 여기 내 XML 단지 차기에 대한 것입니다

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

그리고 같은 결과가 나타납니다.

인증서가 될 수 있습니까? 또는 아마도 XML 파일과 관련이 있습니다 (프로젝트와 XML 파일을 다시 작성해 보았습니다) Android HTTP Connection refused 또는 어떤 종류의 Android 호스트 파일 문제일까요?

나는 어떤 제안이든 열려 있습니다!

나는 많은 각도에서 이것을 시험해 보았고 도움이 될만한 다른 정보를 제공해 주어 기쁩니다! 정말 고마워요!

참고 : URL은 보안상의 이유로 연결하려는 실제 URL이 아닌 더미 URL입니다. 매개 변수가있는 명령 줄에서 실제 웹 사이트를 말릴 수 있고 작동하며 웹 브라우저에서 정상적으로 로그인 할 수 있습니다.

수정 문제점을 확인했습니다! 하지만 불행히도 해결책은 아닙니다. 그래서 문제는 글로벌 DNS 서버에 도메인 항목이없는 dev 서버 URL을 사용하고 있다는 것입니다. 그래서이 문제를 해결하려면 어떻게 든 내 안드로이드 장치/에뮬레이터에서 호스트 파일을 편집해야합니다 ... 누군가가 합법적으로이 작업을 수행 할 수있는 방법을 알고 있습니까?

+1

하여 로그 캣 두 번째 줄에 따르면 > 07-16 16 : 32 : 32.907 : System.err에/W (632) org.apache.http.conn.HttpHostConnectException : HTTP로 연결 : // devdashboard .company는 거절했다. 이 코드가 네트워크 문제가 아닌 것입니까? 서버 구성을 확인 했습니까? –

+0

또한 게시물이어야한다고 확신합니까? –

+0

또한 게시하는 것을 제한하십시오. 사용자 환경에 맞는 정보를 편집해야합니다. –

답변

9

문제점을 확인했습니다! 그래서 문제는 글로벌 DNS 서버에 도메인 항목이없는 dev 서버 URL을 사용하고 있다는 것입니다. How to change the hosts file on android

2) 글로벌 DNS에 등록 된 서버를 얻기 :

1) 호스트를 편집 휴대 전화를) 응원이 필요합니다 (안드로이드 장치에 파일 :

그래서이 문제에 대한 두 가지 해결책이 있습니다 섬기는 사람. (URL에 대한 책임이없는 경우에도 수행하기가 어렵습니다.)

어쨌든 저는 이것이 다른 사람에게도 도움이되기를 바랍니다!

2

URL이 "http://devdashboard.company/login"잘못된 옳지 않다

1) 몇 가지 가능성이 있습니다. 최소한 브라우저를 체크인하십시오. 호스트에도 ping을 수행하십시오.

2) 대신 https 연결이어야합니다.

3) 일부 인증이 필요합니다.

4) 포트 번호가 누락되었습니다. 또는 도메인이 올바르게 설정되지 않았습니다. 아마도 포트 80 기본값이 잘못 되었습니까?

5) 전화는 게시물이 아니어야합니다.

일반적으로 사용자는 서버에 대한 책임이 있거나 그렇지 않습니다. 그것은 일부 elses 책임이며, 올바른 URL과 매개 변수가 무엇인지 그들에게 물어 봐야합니다. 그래서 아마 아무도 잘못하지는 않지만, 당신은 그들에게 확인하는 연결에 대해 물어볼 필요가 있습니다.

당신이 할 수있는 또 다른 일은 성공적으로 연결되어있는 응용 프로그램에서 URL이 어떻게 보이는지 확인하는 것입니다. 이것 좀보세요.

+0

답변 해 주셔서 감사합니다. 그래서 URL은 내가 서버를 보호하기 위해 사용했던 가짜 URL이다. 나는 그것을 반영하기 위해 나의 질문을 편집 할 것이다. 그렇다면 게시물이 아니라면 무엇이되어야할까요? – VinC

+0

그래서 위의 매개 변수를 사용하여 명령 줄에서 말릴 수 있으므로 게시물이라고 생각합니다. 이것이 내 코드에 문제가 있다고 생각하게 만드는 또 다른 이유입니다. 또한 확실히 https 여야하지만 문제를 파악하기 위해 노력하는 동안 두 가지 방법을 모두 시도했습니다. 인증이이 문제의 원인이 될 수 있는지/내가 확인할 수있는 방법을 알고 있습니까? – VinC

+0

문제가 무엇인지 알아 냈습니다! 내 질문에 편집보기 – VinC

2

문제는 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"; 
2

이 문제를 해결 이러한 일 사이에있을 수 있습니다 이러한 솔루션을 따라주세요.

1> 매니페스트 파일의 인터넷 사용 권한을 확인하십시오.

2> 클라이언트와 함께 브라우저로 URL을 확인하고 적절한 요청을 전달하십시오.

3> 다음과 같이 모바일에서 URL을 엽니 다. - http://your ip address/port 이것은 단지 모바일 용으로이 URL을 열어 볼 권한이 있는지 확인하기위한 것입니다.

1

이 게시물은 오래되었지만이 오류를 검색 할 때 처음 나타나는 결과입니다. 동일한 예외가 발생하여 모든 것이 내 코드에서 완전히 정확합니다. 나는 내 AndroidManifest.xml에 인터넷 권한이 포함 된 줄을 주석 처리하고, 앱을 실행하고, HTTP 요청을 보내고, 예외를 가져오고, 응용 프로그램을 닫고, 매니페스트로 돌아가서 권한 줄의 주석 처리를 제거하고 실행 한 버튼을 클릭/실행했습니다. 다시 응용 프로그램 및 예외가 해결되었습니다!

2015 년에 나온 이런 종류의 버그 (Android API 21 및 Intellij IDEA 14의 최신 컴파일 도구와 같은 '고급'도구에서)는 저를 미치게 만듭니다. 마감일이 다가오고 있으며 이런 종류의 버그로 인해 작업이 완전히 중단됩니다!

관련 문제