curl命令java_上curl java 模拟http请求
最近,我的項(xiàng)目要求java模擬http請(qǐng)求,獲得dns解決 tcp處理過(guò)的信息特定的連接。
java api提供urlConnection apache提供的httpClient都不能勝任該需求,二次開發(fā)太費(fèi)時(shí)間。
于是google之。
最后 得出兩種解決的方法:
一是使用HTTP4J。
該開源項(xiàng)目使用socket方式。模擬請(qǐng)求。記錄時(shí)間戳,基本滿足需求。對(duì)于header自己定義等細(xì)節(jié),可在此基礎(chǔ)上比較方便的二次開發(fā)。
僅僅是。當(dāng)中有一些bug須要修復(fù),如https鏈接時(shí)獲取不到ssl時(shí)間等。使用該項(xiàng)目的風(fēng)險(xiǎn)在于不穩(wěn)定和不可控性。
稍作修改后的http4j代碼。
二是使用curl。
google之,curl本身沒(méi)有對(duì)java的支持。由第三份提供了binding用來(lái)使用curl。可能是筆者能力有限,未能成功在windows編譯它。
google也沒(méi)有找到相關(guān)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", "狀態(tài)%{http_code};DNS時(shí)間%{time_namelookup};"
+ "等待時(shí)間%{time_pretransfer}TCP 連接%{time_connect};發(fā)出請(qǐng)求%{time_starttransfer};"
+ "總時(shí)間%{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();
}
}
}
總結(jié)
以上是生活随笔為你收集整理的curl命令java_上curl java 模拟http请求的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nginx post请求超时_nginx
- 下一篇: 焦作治疗精子活率低最好的医院推荐