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を使用
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();
}
}
}