curl javaシミュレーションhttpリクエストについて

1660 ワード

最近、筆者のプロジェクトではjavaがhttpリクエストをシミュレートし、dns解析tcp接続などの詳細な時間消費情報を取得する必要がある.
JAva apiで提供されているurlConnectionやapacheで提供されているhttpClientは、このニーズに耐えられず、二次開発に時間がかかりすぎます.そこでgoogleの.
最後に、2つの解決策が得られました.
一つはHTTP 4 Jの使用です.
このオープンソースプロジェクトはsocket方式を使用し、要求をシミュレートし、タイムスタンプを記録し、基本的に需要を満たす.ヘッドカスタマイズなどの詳細については、これに基づいて比較的便利な二次開発が可能です.ただし、httpsリンク時にssl時間が取得されないなど、いくつかのバグを修正する必要があります.このプロジェクトを使用するリスクは、不安定性と制御不能性にあります.
少し変更したhttp 4 jコード.
http://download.csdn.net/detail/zhongyuan_1990/8837281
二つ目はcurlを使うことです.
Googleによると、curl自体はjavaのサポートがなく、3部目にbindingがcurlを使用するために提供されている.筆者の能力が限られているのか、windowsでのコンパイルに成功しなかった.Googleもjavacurlを見つけられなかった.dllのリソースダウンロード.最後は諦めざるを得なかった.コマンドラインを使用するモードを選択してcurlを操作します.
JAva curlコマンドdemoを使用
package com.netbirdtech.libcurl.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class test {
	public static void main(String[] args) {
		String []cmds = {"curl", "-i", "-w", "  %{http_code};DNS  %{time_namelookup};"
				+ "    %{time_pretransfer}TCP   %{time_connect};    %{time_starttransfer};"
				+ "   %{time_total}","http://www.baidu.com"};
		ProcessBuilder pb=new ProcessBuilder(cmds);
		pb.redirectErrorStream(true);
		Process p;
		try {
			p = pb.start();
			BufferedReader br=null;
			String line=null;
			
			br=new BufferedReader(new InputStreamReader(p.getInputStream()));
			while((line=br.readLine())!=null){
					System.out.println("\t"+line);
			}
			br.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}