【发布时间】:2016-12-21 12:49:48
【问题描述】:
我到处搜索,但无法解决我的问题。我有 AsyncTask,在 doInBackground 我有:
protected Void doInBackground(byte[]... params) {
try {
URL url = new URL(stringURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
// Don't use a cached copy.
onn.setUseCaches(false);
// Use a post method.
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "text/html; charset=UTF-8");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Accept", "text/html");
conn.setRequestProperty("Content-Length", params[0].length);
OutputStream out = conn.getOutputStream();
out.write(params[0]);
out.flush();
out.close();
InputStream is = conn.getInputStream();
int ch;
StringBuffer b =new StringBuffer();
while( ( ch = is.read() ) != -1 ){
b.append( (char)ch );
}
String s = b.toString();
}catch (IOException e) {
e.printStackTrace();
}
我这样调用我的异步任务:new httpRequestResponseTask().execute(byteArray);
每次我成功发送请求并且在我尝试阅读响应后我得到
java.io.IOException: unexpected end of stream on Connection...
当我打电话给conn.getInputStream()。我打电话时遇到同样的异常
conn.getResponseCode() 和 conn.getResponseMessage()。
我可以看到服务器收到我的request并成功发送response。但我不明白。
我尝试了很多想法(其中一些很疯狂)只是为了测试:
*我在设置属性后放conn.connect(); - 相同的IOexception
*不关闭 OutputStream - 相同的 IOexception
*添加大超时,如
conn.setReadTimeout(30000);
conn.setConnectTimeout(35000);
响应应该是 57 字节,这样超时就足够了。 没有变化。
*我尝试使用 url.OpenStream() 获取 InputStream。它只是挂起,没有发生任何事情。
*我尝试了不同的属性,如Accept-Encoding,但属性更少。
*我检查了网址,里面没有空格。网址是这样的:
http://example.com:8080.
我没有代理。我将我的个人手机用作 Wi-Fi 热点,并用我的工作手机测试该程序。它使用 android 6.0,但项目设置为 4.4 kitkat。
我应该以某种方式等待还是做其他事情?我没有想法......
更新异常堆栈
没有内容长度
12-21 14:38:09.516 5481-5572/com.xmltestservers W/System.err: java.io.IOException: unexpected end of stream on Connection{example.com:8080, proxy=DIRECT@ hostAddress=*.*.*.* cipherSuite=none protocol=http/1.1} (recycle count=0)
12-21 14:38:09.516 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:210)
12-21 14:38:09.516 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
12-21 14:38:09.516 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:918)
12-21 14:38:09.516 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:802)
12-21 14:38:09.516 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:460)
12-21 14:38:09.516 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at com.xmltestservers.MainActivity$RetrieveFeedTask.doInBackground(MainActivity.java:172)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at com.xmltestservers.MainActivity$RetrieveFeedTask.doInBackground(MainActivity.java:125)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at java.lang.Thread.run(Thread.java:818)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: Caused by: java.io.EOFException: \n not found: size=0 content=...
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:200)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191)
12-21 14:38:09.517 5481-5572/com.xmltestservers W/System.err: ... 14 more
有内容长度
12-21 14:40:42.783 7729-7837/com.xmltestservers W/System.err: java.io.IOException: unexpected end of stream on Connection{example.com:8080, proxy=DIRECT@ hostAddress=*.*.*.* cipherSuite=none protocol=http/1.1} (recycle count=0)
12-21 14:40:42.784 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:210)
12-21 14:40:42.785 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
12-21 14:40:42.785 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:918)
12-21 14:40:42.785 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:802)
12-21 14:40:42.786 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:460)
12-21 14:40:42.786 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
12-21 14:40:42.786 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
12-21 14:40:42.786 7729-7837/com.xmltestservers W/System.err: at com.xmltestservers.MainActivity$RetrieveFeedTask.doInBackground(MainActivity.java:169)
12-21 14:40:42.786 7729-7837/com.xmltestservers W/System.err: at com.xmltestservers.MainActivity$RetrieveFeedTask.doInBackground(MainActivity.java:125)
12-21 14:40:42.787 7729-7837/com.xmltestservers W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)
12-21 14:40:42.787 7729-7837/com.xmltestservers W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-21 14:40:42.787 7729-7837/com.xmltestservers W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
12-21 14:40:42.787 7729-7837/com.xmltestservers W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
12-21 14:40:42.788 7729-7837/com.xmltestservers W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
12-21 14:40:42.788 7729-7837/com.xmltestservers W/System.err: at java.lang.Thread.run(Thread.java:818)
12-21 14:40:42.788 7729-7837/com.xmltestservers W/System.err: Caused by: java.io.EOFException: \n not found: size=57 content=f1f1f1340079c1eed5d9043324501c4ae6700647e093ea8a18b2e42c9d2acbd8...
12-21 14:40:42.789 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:200)
12-21 14:40:42.790 7729-7837/com.xmltestservers W/System.err: at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191)
12-21 14:40:42.790 7729-7837/com.xmltestservers W/System.err: ... 14 more
【问题讨论】:
-
从这里检查发布方法readyandroid.wordpress.com/…
-
我的代码正在做与 postJson 方法相同的事情,但它不起作用。唯一的区别是他的 Content-Type 是 application/json 而我的是 text/html。我完全像 mkyong.com/java/how-to-send-http-request-getpost-in-java 那样做,但我仍然得到相同的 IOException
-
您将 html 内容作为字节数组发布?
-
另外,请阅读其他异常。
EOFException: \n not found: size=0。所以,没有新行,服务器也没有返回任何内容 -
You are posting html content as a byte array?- 不。我应该把它改成别的。关于另一条评论 - 我添加了一个带有 Content-Length 的评论。这个例外是在IOException之后,所以EOFException: \n not found: size=0是因为IOException。
标签: java android httprequest httpurlconnection httpresponse