java多线程模拟有会话的访问web系统,并记录访问日志

代码如下:

         不要做坏事呦


package pressureTest;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Calendar;
import java.util.Scanner;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class HttpTest implements Runnable {

    private static String strUrl = null;
    private static long numL = 0L;
    private static Scanner scanner = new Scanner(System.in);
    private static File f = new File("E:\\test.txt");
    private static HttpClient httpClient;
    
    public HttpTest(HttpClient httpClient){
        this.httpClient=httpClient;
    }
    

    public void run() {
        while (true)
            try {
//                Cookie[] cookies = httpClient.getState().getCookies();  
//                httpClient.getState().addCookies(cookies);

                 GetMethod get = new  GetMethod(strUrl + numL);  
//                    get.setRequestHeader("Cookie" , cookies.toString());  
                 int statusCode = httpClient.executeMethod(get);  
                
//                CloseableHttpClient httpclient = HttpClients.createDefault();
//                HttpGet httpget = new HttpGet(strUrl + numL);
//                CloseableHttpResponse response = httpclient.execute(httpget);
                try {
//                int statusCode = response.getStatusLine().getStatusCode();
                
                if(statusCode!=200){
                    BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
                    bw.write("第"+numL+"次访问,状态码:["+statusCode+"] 时间"+Calendar.getInstance().getTime().toString());
                    bw.newLine();
                    bw.close();
                    break;
                }
                
                } finally {
                    get.releaseConnection();  
                    numL++;
                }
                Thread.sleep(10L);
            } catch (InterruptedException e) {
                while (true) {
                    e.getMessage();
                    try {
                        Thread.sleep(1000L);
                    } catch (InterruptedException ie) {
                        ie.printStackTrace();
                    }
                }

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

    public static void main(String[] args) throws HttpException, IOException {
        
        HttpClient client = login();
        
        System.out.println("");
        int threadNum;
        while (true) {
            System.out.println("请输入要生成的线程数:");
            threadNum = scanner.nextInt();
            System.out.println("请输入网址:");
            String str = scanner.next();
//            String str = "http://www.baidu.com";
            if ((!(str.startsWith("http://")))
                    && (!(str.startsWith("https://")))) {
                strUrl = "http://" + str;
                System.out.println(strUrl);
            } else {
                strUrl = str;
            }

            if (str.indexOf("?") >= 0)
                strUrl += "&num=";
            else {
                strUrl += "?num=";
            }
            System.out.println("--------------------------------------");
            System.out.println("线程数:" + threadNum);
            System.out.println("地址" + str);
            System.out.println("请再次确认(Y/N):");
            String tmp = scanner.next();
            if ("Y".equalsIgnoreCase(tmp))
                break;
            if ("N".equalsIgnoreCase(tmp)) {
                continue;
            }
//            System.out.println("输入错误,请重新输入(Y/N):");
        }
        BufferedWriter bw;
        try {
            bw = new BufferedWriter(new FileWriter(f, true));
            bw.write("测试开始 时间:"+Calendar.getInstance().getTime().toString());
            bw.newLine();
            bw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for (int i = 0; i < threadNum; i++) {
            HttpTest at = new HttpTest(client);
            Thread t = new Thread(at);
            t.start();
//            System.out.println(i);
        }
    }

    private static HttpClient login() throws HttpException, IOException {
        HttpClient client = new HttpClient();

        // web系统登录页面 以及登陆信息设置
        PostMethod post = new PostMethod(
                "http://XXXXXXXXXXXXX");
        NameValuePair ie = new NameValuePair("User-Agent",
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
        NameValuePair url = new NameValuePair("url", "/TelinCRMQW/");
        NameValuePair username = new NameValuePair("username", "admin");
        NameValuePair password = new NameValuePair("userpassword", "password");
        NameValuePair session = new NameValuePair("session", "1111111");
        post.setRequestBody(new NameValuePair[] { ie, url, username, password });
        client.executeMethod(post);
        System.out
                .println("******************************登录******************************");
        Cookie[] cookies = client.getState().getCookies();
        client.getState().addCookies(cookies);
        post.releaseConnection();
        return client;

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值