zoukankan      html  css  js  c++  java
  • 上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("	"+line);
    			}
    			br.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    }
    

  • 相关阅读:
    以查询功能谈下,三层架构中的工厂模式与其中反射的应用
    结对编程
    第四周周结
    知识思考
    自我介绍
    本周开发工作及内容
    第三周周结
    启航
    如何写出健壮的Java代码
    CentOS x64上Matlab R2015b的镜像安装方法与卸载
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5040132.html
Copyright © 2011-2022 走看看