关于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();
		}

	}
}
时间: 2024-11-10 01:29:18

关于curl java 模拟http请求的相关文章

curl java 模拟http请求

curl java 模拟http请求 直接上代码: 1 public static void main(String args[]) throws Exception { 2 3 String url = "https://www.baidu.com"; 4 String[] cmds = {"curl",url}; 5 ProcessBuilder pb = new ProcessBuilder(cmds); 6 pb.redirectErrorStream(tr

java模拟post请求发送json

java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: 1 package main.utils; 2 3 import java.io.*; 4 import java.net.HttpURLConnection; 5 import java.net.URL; 6 7 public class HttpUtilTest { 8 Log log = new Log(this.g

java 模拟http请求

整理一下用java模拟http请求的方法,如果有不正确的地方希望大家指正,如果大家有什么更好的方法欢迎提出 1.URLConnection可以向URL地址发送请求,读取URL的资源.建立和URL的连接通常需要一下几步: 创建URL对象,并通过调用openConnection方法获得URLConnection对象: 设置URLConnection参数和普通请求属性: 向远程资源发送请求: 远程资源变为可用,程序可以访问远程资源的头字段和通过输入流来读取远程资源返回的信息. import java.

Java模拟http请求远程调用接口工具类

package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 用于模拟HTTP请求中GET/POST方式 * @author landa *

java模拟http请求上传文件,基于Apache的httpclient

1.依赖 模拟http端的请求需要依赖Apache的httpclient,需要第三方JSON支持,项目中添加 <dependency> <groupId>org.apache</groupId> <artifactId>httpclient</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>

java模拟post请求登录

import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; impor

java 模拟Http请求 提交图片和数据

1,伪造请求 package com.sxb.web.v2.wh.unittest; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Input

(Java) 模拟http请求调用远程接口

package com.vcgeek.hephaestus.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 功能描述 * * @autho

java模拟post请求发送json数据

import com.alibaba.fastjson.JSONObject; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apa