我想在一个HTTP连接中进行多个帖子调用,
我将发送Arraylist<String>
和httpConnection
对象作为输入参数。
循环ArrayList
并将请求写入服务器。
我最终收到以下错误:
Cannot write output after reading input.
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
这是我的代码。我正在用来完成上述任务。
public boolean sendToLogsAPI(ArrayList<String> logList, HttpURLConnection conn) throws IOException
{
try
{
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
for(int i=0; i<logList.size(); i++)
{
wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(logList.get(i));
wr.flush();
int nothing = conn.getResponseCode();
String morenothing = conn.getResponseMessage();
}
wr.flush();
wr.close();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(conn != null)
{
conn.disconnect();
}
}
return false;
}
我该如何克服这种情况?
最佳答案
根据HttpURLConnection
的javadoc:
每个HttpURLConnection实例用于发出单个请求
有关更多信息,请参见this。
问题是完成conn.getOutputStream()
后就无法执行wr.flush()
。
如果要发送另一个发布请求,则必须创建HttpURLConnection
的新实例。您可以通过多种方式进行操作。一种方法是创建每次提供新连接的方法getHttpURLConnection()
[如果您演示将如何创建HttpURLConnection
实例并将其传递给方法sendToLogsAPI()
,那么我可以向您展示getHttpURLConnection()
的实现以及修改现有代码,如下所示:
public boolean sendToLogsAPI(ArrayList<String> logList) throws IOException
{
DataOutputStream wr = null;
HttpURLConnection conn = null;
try
{
for(int i=0; i<logList.size(); i++)
{
conn = conn("<Some-URL>","<API-Key>","<GUID>");
wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(logList.get(i));
wr.flush();
int nothing = conn.getResponseCode();
String morenothing = conn.getResponseMessage();
}
if(wr != null) {
wr.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(conn != null)
{
conn.disconnect();
}
}
return false;
}
我想问你的另一个问题是为什么要使用相同的
HttpURLConnection
实例。即使您使用了其中的多个,也可以使用相同的Socket
(和基础TCP)。因此,不必担心HttpURLConnection
的多个实例。关于java - HttpUrlConnection在单个连接中发送多个发布请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39539975/