当前位置: 首页 > 知识库问答 >
问题:

HTTPurlConnection:发送10,000个请求会导致“连接重置”

支才
2023-03-14

我有一个简单的java程序,它以并行线程向服务器发送10,000个HTTP请求。

import java.io.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.*;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;
import java.io.OutputStreamWriter;
import java.io.DataOutputStream;

public class CreateUsers {

        public static void main(String[] args){
                System.out.println(Thread.currentThread().getName());

                for(int i=0; i<10000; i++){
                        final int cnt = i;
                        new Thread("" + i){
                                public void run(){
                                        try {
                                                 String url = "http://myurl.com"; //I use my actual server url here
                                                URL object=new URL(url);
                                                HttpURLConnection con = (HttpURLConnection) object.openConnection();
                                                con.setDoOutput(true);
                                                con.setRequestMethod("POST");
                                                con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

                                                JSONObject parent=new JSONObject();
                                                JSONObject all_users=new JSONObject();
                                                all_users.put("user_name", "abc");
                                                all_users.put("email", "test"+cnt+"@test.com");

                                                JSONArray users = new JSONArray();
                                                users.put(all_users);
                                                parent.put("users", users);
                                                OutputStream os = con.getOutputStream();
                                             os.write(parent.toString().getBytes("UTF-8"));
                                                os.close();

                                                int responseCode = con.getResponseCode();
                                                System.out.println("\nSending 'POST' request to URL : " + url);
                                                System.out.println("Response Code : " + responseCode);
con.disconnect();

                                        }
                                        catch (Exception e) {e.printStackTrace();}

                                }
                        }.start();
                }
        }
}

我的服务器是一个amazon ec2实例,运行在ubuntu、apache Tomcat7、30G RAM、4个CPU上。

共有1个答案

齐承运
2023-03-14

您基本上是在对计算机进行拒绝服务攻击。webserver无法处理如此多的同时连接,必须中止某些传入尝试。

如果您打算编写这样一个工具,它似乎工作得很好。否则,请指出你实际上想要完成什么。

 类似资料:
  • 问题内容: 这是我的代码: 我的回应是: 500服务器错误 我打开我的变量,然后看到: POST / rest / platform / domain / list HTTP / 1.1 即使我曾经将其设置为GET,为什么也将其设置为POST ? 问题答案: 将请求方法隐式设置为POST,因为这是您要发送请求正文时的默认方法。 如果要使用GET,请删除该行并删除该行。您无需发送GET请求的请求正文

  • 问题内容: 我已经开发了一个Java代码,该代码使用URL和HttpUrlConnection将以下cURL转换为Java代码。卷曲是: 我已经编写了此代码,但是它始终会给HTTP代码400错误的请求。我找不到丢失的内容。 问题答案: 你的JSON不正确。代替 写 因此,JSONObject.toString()应该只为外部对象调用一次。 另一件事(可能不是你的问题,但我想提一下): 为确保不会遇

  • 问题内容: 我想使用对服务器进行一些API调用。但是请求未成功,返回: 因此,我想检查发送到服务器的“真实”内容是什么。实际内容是指确切的HTTP请求。 有什么想法可以看到吗? 编辑: 根据此处的第一个答案,我应该澄清我的问题:我想避免使用外部程序(例如HTTP嗅探器)或其他任何东西,而我希望有一个函数或一个属性或任何包含我要查找的信息的东西。 如果不是这种情况,有人知道该信息是否可以手动重建(例

  • 我在纠结HttpURLConnection和OutputStreamWriter。 代码实际上到达了服务器,因为我确实得到了有效的错误响应。发出POST请求,但服务器端未接收到数据。 任何关于正确使用这种东西的提示都是非常感谢的。 代码在异步任务中 我尝试发送的JSON: 我从服务器得到的回应是: 我应该得到的回应是: 服务器端 PHP 脚本: 以及 Android Studio 中的 logca

  • 我已经写了这段代码,但它总是给HTTP代码400错误的请求。我找不到丢失的东西。

  • 问题内容: 我正在尝试调试我写的一个简单REST库时遇到的非常异常的错误。 我使用标准的net / http包发出Get,Post,Put,Delete请求,但是当我连续发出多个请求时,我的测试有时会失败。我的测试看起来像这样: 我正在这样请求: 有时它可以工作,但是大多数时候我会出现1或2个失败: 当我提出多个请求时,就会发生失败。如果我注释掉除PUT请求之外的所有内容,则测试将始终通过。一旦包