2015-03-19 77 views
0

它已經很久了我被這個問題困住了,從我的androidApp HTTP get get to work fine我的電纜調制解調器HTTP服務器,但在與Linux的mini_httpd我得到這個org.apache.http.client.ClientProtocolException客戶處後不久org.apache.http.ProtocolException:無效的頭文件:<?xml version =「1.0」encoding =「UTF-8」?>

httpClient.execute(httpget); 

我做了很多的研究在這裏張貼了這個問題之前,在我沒有設置contentType爲xml之前,但我正在做它

httpget.setHeader("Content-Type", "application/xml"); but still struggling with same error. 

詳細代碼如下

HttpParams httpParameters = new BasicHttpParams(); 
int timeoutConnection = 10000; 
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
int timeoutSocket = 25000; 
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 

    HttpGet httpget = new HttpGet(URL);   

    httpget.setHeader("Content-Type", "application/xml"); 
    httpget.addHeader("Accept", "text/xml"); 
    httpget.setParams(httpParameters); 

    HttpClient httpClient = new DefaultHttpClient(); 
    HttpResponse response = null; 
    try { 
     response = httpClient.execute(httpget); 
     StatusLine statusLine = response.getStatusLine(); 
     if (statusLine.getStatusCode() == HttpStatus.SC_OK) { 
      Log.d("Http response", "response string got"); 

      /* parse the response received from server */ 
      try { 
       cmInfo = xmlParser.parse(response.getEntity().getContent()); 
       Log.d("Http Response","back in main"); 
      } catch (XmlPullParserException e1) { 
       Log.d("parse:", "XmlPullParserException"); 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       Log.d("parse:", "IOException"); 
       e1.printStackTrace(); 
      } 
    } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), errMsg2, Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), errMsg1, Toast.LENGTH_LONG).show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), "Connection Refused from server or Connection Timeout", Toast.LENGTH_LONG).show(); 
    } 

請建議做什麼或有什麼解決辦法。

這裏是logcat的

03-18 18:41:08.246: D/getWifiDetails: cmURL:(32090): http://192.168.0.1:50010? 
03-18 18:41:08.246: D/WizardYourWifiActivity: URL-(32090): http://192.168.0.1:50010?get_data=PARM_WIFI_SSIDNAME_2_4G,PARM_WIFI_SSIDNAME_5G,PARM_WIFI_SECURITYMODE_2_4G,PARM_WIFI_SECURITYMODE_5G,PARM_WIFI_PASSPHRASE_2_4G,PARM_WIFI_PASSPHRASE_5G,PARM_WIFI_MODE_2_4G,PARM_WIFI_MODE_5G,PARM_WIFI_POWER_2_4G,PARM_WIFI_POWER_5G,PARM_WIFI_CHANNEL_2_4G,PARM_WIFI_CHANNEL_5G,PARM_WIFI_GUEST_NW_EN_2_4G,PARM_WIFI_GUEST_NW_EN_5G 
03-18 18:41:08.707: W/System.err(32090): org.apache.http.client.ClientProtocolException 
03-18 18:41:08.713: W/System.err(32090): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) 
03-18 18:41:08.713: W/System.err(32090): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
03-18 18:41:08.713: W/System.err(32090): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
03-18 18:41:08.713: W/System.err(32090): at com.arrisi.selfinstall.wizard.WizardYourWifiActivity.doCustomCreate(WizardYourWifiActivity.java:98) 
03-18 18:41:08.713: W/System.err(32090): at com.arrisi.selfinstall.wizard.BaseWizardActivity.onCreate(BaseWizardActivity.java:44) 
03-18 18:41:08.713: W/System.err(32090): at android.app.Activity.performCreate(Activity.java:5933) 
03-18 18:41:08.713: W/System.err(32090): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
03-18 18:41:08.713: W/System.err(32090): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
03-18 18:41:08.713: W/System.err(32090): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
03-18 18:41:08.713: W/System.err(32090): at android.app.ActivityThread.access$800(ActivityThread.java:144) 
03-18 18:41:08.714: W/System.err(32090): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
03-18 18:41:08.714: W/System.err(32090): at android.os.Handler.dispatchMessage(Handler.java:102) 
03-18 18:41:08.714: W/System.err(32090): at android.os.Looper.loop(Looper.java:135) 
03-18 18:41:08.714: W/System.err(32090): at android.app.ActivityThread.main(ActivityThread.java:5221) 
03-18 18:41:08.714: W/System.err(32090): at java.lang.reflect.Method.invoke(Native Method) 
03-18 18:41:08.714: W/System.err(32090): at java.lang.reflect.Method.invoke(Method.java:372) 
03-18 18:41:08.714: W/System.err(32090): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
03-18 18:41:08.714: W/System.err(32090): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
03-18 18:41:08.714: W/System.err(32090): Caused by: org.apache.http.ProtocolException: Invalid header: <?xml version="1.0" encoding="UTF-8"?> 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.impl.io.AbstractMessageParser.parseHeaders(AbstractMessageParser.java:162) 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:178) 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180) 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 
03-18 18:41:08.714: W/System.err(32090): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428) 
03-18 18:41:08.715: W/System.err(32090): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
03-18 18:41:08.715: W/System.err(32090): ... 17 more 
+0

的問題是不是在客戶端,服務器返回不正確的頭一個反應,你應該跟蹤原始服務器響應。無論如何,如果你想做一個簡單的請求,使用Apache Http組件沒有意義,請使用Android的默認HttpURLConnection。 – vzamanillo 2015-03-19 12:27:54

+0

@vzamanillo我編輯了我的問題與服務器的響應。服務器實際上是按照期望響應正確的消息,但在客戶端代碼拋出ClientProtocolException – 2015-03-19 13:27:27

+0

檢查此http://stackoverflow.com/questions/12684739/,跟蹤服務器響應看到服務器返回的http頭,是在客戶端不是錯誤,但客戶端會向您發出有關錯誤的警告。 – vzamanillo 2015-03-19 14:01:32

回答

0

涉嫌此問題是由於來自服務器的響應不正確。基本上

httpget.setHeader("Content-Type", "application/xml"); 

沒有被實際上在我的http客戶端創建問題的服務器設置。 我使用HttpURLConnection代替了appache.http,正如其他stackOverFlow答案中所建議的,但實際上並沒有解決問題,但它幫助我縮小了問題範圍。

感謝@vzamanillo烏拉圭回合的幫助

相關問題