【问题标题】:Why do I get Android : The target server failed to respond?为什么我会得到 Android : 目标服务器无法响应?
【发布时间】:2016-08-23 05:40:40
【问题描述】:

API 链接:http://www.familybuds.com/storegrunt-new/api_home/validate_step_one/platform/1

POST 参数:store_name = "abc" 代码在 GoDaddy 服务器上

这个 api 在 7 月 25 日之前运行良好,但突然从 26 日早上在 Android APP 上停止运行。相同的 api 在 iPhone APP 上运行良好。

Android 代码:

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000+12000);

DefaultHttpClient  client = new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost(url);

HttpResponse response; 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  

client.addRequestInterceptor(new HttpRequestInterceptor() {              

        @Override
        public void process(HttpRequest request, HttpContext context)
                throws HttpException, IOException {
            // TODO Auto-generated method stub
            if (!request.containsHeader("Accept-Encoding")) {
                request.addHeader("Accept-Encoding", "gzip");
            }
        }

    });

client.addResponseInterceptor(new HttpResponseInterceptor() {

        public void process(
                final HttpResponse response,
                final HttpContext context) throws HttpException, IOException {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                Header ceheader = entity.getContentEncoding();
                if (ceheader != null) {
                    HeaderElement[] codecs = ceheader.getElements();
                    for (int i = 0; i < codecs.length; i++) {
                        if (codecs[i].getName().equalsIgnoreCase("gzip")) {
                            response.setEntity(
                                    new GzipDecompressingEntity(response.getEntity()));
                            return;
                        }
                    }
                }
            }
        }               


    });

// Log.d(TAG, "Executing request: "+ methodToString(mMethod) +": "+ mUri.toString());
response = client.execute(httppost);

Android 的堆栈跟踪(日志):

07-26 16:24:28.031: W/System.err(13642): org.apache.http.NoHttpResponseException: The target server failed to respond
07-26 16:24:28.089: W/System.err(13642):    at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:85)
07-26 16:24:28.097: W/System.err(13642):    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
07-26 16:24:28.097: W/System.err(13642):    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179)
07-26 16:24:28.101: W/System.err(13642):    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
07-26 16:24:28.105: W/System.err(13642):    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
07-26 16:24:28.105: W/System.err(13642):    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
07-26 16:24:28.105: W/System.err(13642):    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
07-26 16:24:28.105: W/System.err(13642):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:421)
07-26 16:24:28.109: W/System.err(13642):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
07-26 16:24:28.113: W/System.err(13642):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
07-26 16:24:28.113: W/System.err(13642):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
07-26 16:24:28.117: W/System.err(13642):    at com.webhelper.WebApiRequest.performJSon(WebApiRequest.java:111)
07-26 16:24:28.121: W/System.err(13642):    at com.webhelper.HttpHelper.doInBackground(HttpHelper.java:171)
07-26 16:24:28.121: W/System.err(13642):    at com.webhelper.HttpHelper.doInBackground(HttpHelper.java:1)
07-26 16:24:28.124: W/System.err(13642):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-26 16:24:28.124: W/System.err(13642):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
07-26 16:24:28.128: W/System.err(13642):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
07-26 16:24:28.128: W/System.err(13642):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
07-26 16:24:28.128: W/System.err(13642):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
07-26 16:24:28.132: W/System.err(13642):    at java.lang.Thread.run(Thread.java:1019)

已经尝试过来自 Https connection Android 的解决方案,但没有运气..

我尝试将相同的服务器代码放在 Amazon EC2 服务器上。API 与 android 和 iPhone APP 运行良好。

谁能帮忙,Android应用程序突然无法与GoDaddy上的服务器(API)通信的原因可能是什么

【问题讨论】:

    标签: android api http httpresponse


    【解决方案1】:
    HttpParams httpParameters = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
    HttpConnectionParams.setSoTimeout(httpParameters, 10000+12000);
    
    
    DefaultHttpClient  client = new DefaultHttpClient(httpParameters);
    HttpPost httppost = new HttpPost(url);
    

    尝试用这个替换上面的代码

    HttpParams httpParameters = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
    HttpConnectionParams.setSoTimeout(httpParameters, 10000+12000);
    
    
    DefaultHttpClient  client = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    httpost.setParams(httpParameters);
    

    这个解决方案对我有用....

    【讨论】:

    • 这对我有用。自 2014 年 7 月 25 日以来,我遇到了同样的问题。
    • 嗨@Dharni,我有同样的问题,你的回答已经解决了。您能否说明为什么现在需要进行此更改,因为它以前运行良好?
    猜你喜欢
    • 2020-07-17
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多