上curl java 模擬http請求


        最近,我的項目要求java模擬http請求,獲得dns解決 tcp處理過的信息特定的連接。

java api提供urlConnection apache提供的httpClient都不能勝任該需求,二次開發太費時間。

於是google之。

最后 得出兩種解決的方法:

一是使用HTTP4J。

該開源項目使用socket方式。模擬請求。記錄時間戳,基本滿足需求。對於header自己定義等細節,可在此基礎上比較方便的二次開發。

僅僅是。當中有一些bug須要修復, 如https鏈接時獲取不到ssl時間等。使用該項目的風險在於不穩定和不可控性。


稍作修改后的http4j代碼。

http://download.csdn.net/detail/zhongyuan_1990/8837281


二是使用curl。

google之,curl本身沒有對java的支持。由第三份提供了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();
		}
		
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM