在Java中通过DataOutputStream发送多个POST请求

3
我正在尝试使用for循环通过DataOutputStream发送多个POST请求,然后关闭它。目前,只有"trades"数组列表的第一个索引被发送到网站。任何其他索引都将被忽略,我想这些索引没有被发送。我想知道是否正确地刷新了流。谢谢!!! 交易值的例子:"101841599","101841801" 代码值的例子:85e4c22
我的代码片段:
       private ArrayList<String> trades = new ArrayList<String>();
       private String code;

            String url = "http://www.dota2lounge.com/ajax/bumpTrade.php";
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
            con.setRequestProperty("Cookie", cookie);
            con.setDoOutput(true);

        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        for(int i=0; i<trades.size(); i++){
            wr = new DataOutputStream(con.getOutputStream());
            wr.writeBytes("trade=" + trades.get(i) + "&code=" + code);
            wr.flush();
            System.out.println("again");
        }   
        wr.flush();
        wr.close();
2个回答

5

事实证明,我必须获取响应才能在开始新连接之前正确关闭连接。 将以下行附加到for循环的末尾即可解决问题:

int nothing = con.getResponseCode();
String morenothing = con.getResponseMessage();

2
我必须说,我是通过谷歌搜索找到这篇文章的,它解决了我长期以来一直存在的问题!!分享解决方案的重要性应该被广泛传播!+1 非常感谢 :) - DanielY

2
HttpURLConnection javadoc中可以得知: "每个HttpURLConnection实例用于发起一个请求,但底层的网络连接可能会被其他实例透明地共享。"
因此,如果您想发送多个请求,则对于每个请求调用obj.openConnection(),设置连接设置,打开OutputStream并写入数据。您的Java运行时允许保持实际连接以节省时间和带宽。

for(int i=0; i<trades.size(); i++){ con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Accept-Language", "en-US,en;q=0.8"); con.setRequestProperty("Cookie", cookie); con.setDoOutput(true); wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes("trade=" + trades.get(i) + "&code=" + code); wr.flush(); wr.close(); System.out.println(i); } - lsnow2017
DataOutputStream wr; for(int i=0; i<trades.size(); i++){ con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Accept-Language", "en-US,en;q=0.8"); con.setRequestProperty("Cookie", cookie); con.setDoOutput(true); wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes("trade=" + trades.get(i) + "&code=" + code); wr.flush(); wr.close(); System.out.println(i);
}
- lsnow2017
@lsnow2017 你是如何检查哪些请求被发送的?也许它们都被发送了,但服务器正在限制你的请求。如果在循环结束时使用等待调用等待几秒钟,它是否表现相同? - mikebolt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接