gpt4 book ai didi

java - 在单个连接中发送多个 post 请求的 HttpUrlConnection

转载 作者:行者123 更新时间:2023-11-29 04:40:09 25 4
gpt4 key购买 nike

我想在单个 HTTP 连接中进行多个 post 调用,

  1. 我将发送 Arraylist<String>httpConnection对象作为输入参数。
  2. 迭代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 :

Each HttpURLConnection instance is used to make a single request

参见 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 - 在单个连接中发送多个 post 请求的 HttpUrlConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39539975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com