我有一个用PHP编写的Web服务(在LAMP堆栈上运行),用于上传文件并对其进行处理。
当我从我的Android应用程序调用它时,服务器返回错误503.
在Android中,如果我删除文件上传部分并传递其他参数,它就可以了!
如果我评论所有代码,它仍会出错。所以看起来由于某种原因,通过Android上传的文件无法正常工作!
注意:它一直工作到上周。上周我将我的网络服务器移动到新主机(不同的IP) - 这就是全部。
如果我从Chrome Rest客户端测试,它的效果非常好!!!
不同服务器上的相同脚本(不同的域名和IP)可以正常工作。
可能是什么错误? 为什么只有当我从Android应用程序调用时才会失败!!
以下是Android代码:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(web_url);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
InputStream is = PBAApplication.getInstance().getContext().getContentResolver().openInputStream(fileURI);
InputStreamBody isb = new InputStreamBody(is, fileName);
builder.addPart("type", new StringBody("APPM"));
builder.addPart("file", isb);
httpPost.setEntity(builder.build());
// Execute HTTP Request
HttpResponse response = httpClient.execute(httpPost);
服务器错误日志显示:
(32)Broken pipe: [client 219.74.158.38:21214] AH01075: Error dispatching request to : (sending stdin)
答案 0 :(得分:0)
您可以采取一些措施进行问题排查:
要记录通过HttpClient的所有流量,请使用以下终端命令:
// adb shell setprop log.tag.org.apache.http VERBOSE
// adb shell setprop log.tag.org.apache.http.wire VERBOSE
将此添加到您的Application类:
java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "debug");
System.setProperty("http.keepAlive", "false");