我正在研究这个与我的tomcat http服务器通信的android应用程序。
此服务器已联机。
据我所知,有这个设备正在做惊人的事情;它是LG Optimus G Pro。
我在应用中测试了Volley代码和HttpClient代码,试图从http服务器中检索一些简单的数据。
这段代码已经工作了几个月,但我最近注意到它抛出异常并且没有连接:
11-30 15:53:09.157 4174-4197/supernet.interactapp:remote W/System.err: org.apache.http.client.HttpResponseException: Bad Gateway
11-30 15:53:09.177 4174-4197/supernet.interactapp:remote W/System.err: at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
11-30 15:53:09.177 4174-4197/supernet.interactapp:remote W/System.err: at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
11-30 15:53:09.177 4174-4197/supernet.interactapp:remote W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
11-30 15:53:09.177 4174-4197/supernet.interactapp:remote W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
11-30 15:53:09.177 4174-4197/supernet.interactapp:remote W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
11-30 15:53:09.187 4174-4197/supernet.interactapp:remote W/System.err: at supernet.interactapp.util.MessageManager.getProfileUrl(MessageManager.java:1120)
11-30 15:53:09.187 4174-4197/supernet.interactapp:remote W/System.err: at supernet.interactapp.util.MessageManager.run(MessageManager.java:1689)
在使用排球码与该网址进行通信时,我也会得到类似的 Bad Gateway,502 。
每次都不会发生这种情况。
需要注意的事实:
它经常出现在Optimus G Pro上。当我在同一台Optimus G Pro上的浏览器(谷歌浏览器)中访问网址时,浏览器会响应:
" WAPGW无法连接到远程服务器"
当我在同一台设备上访问Opera Mini浏览器中的网址时,它会通过。
当发生这种情况时,如果我将Optimus G Pro用作笔记本电脑的无线热点并访问笔记本电脑浏览器上的网址(也称为Google Chrome)网址已成功打开....(与热点网络共享的移动网络相同!)
在重复运行应用程序后,此问题有时会神秘地消失。
它发生在其他测试设备上,但频率较低。
在发生此问题时,我可以在同一设备上打开其他网站(LG Optimus G Pro)。
请发生什么事?
各种文章都表明,移动网络或某些上游服务器充当我服务器的网关。
根据我在这里制作的事实,这似乎没有用水。
以下是HttpClient
版本
public static boolean getLoadUrl(final Context context,Runnable onSuccess,final String url,int retries) {
HttpClient messageClient;
HttpPost messagePost;
boolean connectionExists = connectionExists(context);
if(!connectionExists){
return false;
}
messageClient = new DefaultHttpClient();
messageClient.getParams().setParameter("http.socket.timeout", 300 * 1000);
messageClient.getParams().setParameter("http.connection.stalecheck", true);
messagePost = new HttpPost( url );
try {
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
messagePost.setEntity(entity);
String response = messageClient.execute(messagePost, new BasicResponseHandler());
////RESPONSE IN
response = ServerSelect.removePortNumberFromURL(response);
Log.e("processed balancer",response);
//The response is a load balancer server url.
if(!response.startsWith("error")){
ServerSelect.LOAD_BALANCER_URL = response;
Utils.logErrorMessage("HttpClient gotten load-balancer-url---"+response,ServerSelect.class);
if(onSuccess!=null){
onSuccess.run();
}
return true;
}
else{
int retrier = retries - 1;
if (retrier == 0) {
return false;
}
if (retrier > 0) {
getLoadUrl(context,onSuccess,url,retrier);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
至于Volley,打印出VolleyError error
对象
error.networkResponse.headers给出
{"Connection":"Close","Content-Length":"251","Content-Type":"text/html; charset\u003dUTF-8","X-Android-Received-Millis":"1480532198201","X-Android-Response-Source":"NETWORK 502","X-Android-Selected-Transport":"http/1.1","X-Android-Sent-Millis":"1480532176459"}
onErrorResponse方法中的异常:
11-30 19:56:38.264 30198-30198/supernet.interactapp:chatscp W/System.err: supernet.interactapp.volley.error.ServerError
11-30 19:56:38.264 30198-30198/supernet.interactapp:chatscp W/System.err: at supernet.interactapp.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:155)
11-30 19:56:38.264 30198-30198/supernet.interactapp:chatscp W/System.err: at supernet.interactapp.volley.NetworkDispatcher.run(NetworkDispatcher.java:119)
11-30 19:56:38.274 30198-30198/supernet.interactapp:chatscp D/Volley: [1] MarkerLog.finish: (25001 ms) [ ] http://www.interactiapp.com/LoadBalancer/FetchLoadBalancersServlet?user_id=147391%2B2348165779034&user_phone=%2B2348165779034 0xa3346b58 IMMEDIATE 1
LG Optimus G Pro在Android Kitkat 4.4.2上运行