yxhxj2006

          常用鏈接

          統計

          最新評論

          HttpClient使用

          背景:因為想寫一個測試tomcat連接的程序,就試試自已去構造Http請求。找了一下發現Apache下有一個比較成熟的輪子HttpComponets.

           

          使用庫:Apache Http Client

          HttpClient是一個代碼級的Http客戶端工具,可以使用它模擬瀏覽器向Http服務器發送請求。

          其中HttpClient是HttpComponents項目其中的一部份,HttpComponents簡稱為hc.

          http://hc.apache.org/

          使用HttpClient還需要HttpCore.這里其中包括Http請求與Http響應的代碼封裝。

           

          現在導入兩個jar包:

          httpclient-4.0.jar

          httpcore-4.0.jar

          httpmime-4.0.jar

           

          開始一個請求代碼如下:

          Java代碼 復制代碼 收藏代碼
          1. HttpClient httpClient = new DefaultHttpClient();   
          2. //構造請求,如果想使用POST則new一個HttpPost   
          3.         HttpGet get = new HttpGet("http://www.iteye.com");   
          4.         HttpResponse response = httpClient.execute(get);   
          5. //先從響應頭得到實體   
          6.         HttpEntity entity = response.getEntity();      
          7. //得到實體輸入流   
          8.         InputStream inSm = entity.getContent();   
          9.         Scanner inScn = new Scanner(inSm);   
          10.         while(inScn.hasNextLine()){   
          11.             System.out.println(inScn.nextLine());   
          12.         }   
          13.         entity.consumeContent();  
          HttpClient httpClient = new DefaultHttpClient(); //構造請求,如果想使用POST則new一個HttpPost 		HttpGet get = new HttpGet("http://www.iteye.com"); 		HttpResponse response = httpClient.execute(get); //先從響應頭得到實體 		HttpEntity entity = response.getEntity();	 //得到實體輸入流 		InputStream inSm = entity.getContent(); 		Scanner inScn = new Scanner(inSm); 		while(inScn.hasNextLine()){ 			System.out.println(inScn.nextLine()); 		} 		entity.consumeContent();

           

          這個是在HC例子中有代碼作了少量的修改。

          輸出:

          Java代碼 復制代碼 收藏代碼
          1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
          2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">   
          3.   <head>   
          4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>   
          5.     <title>JavaEye Java編程 Spring框架 AJAX技術 Agile敏捷軟件開發 ruby on rails實踐 - JavaEye做最棒的軟件開發交流社區</title>   
          6.     <meta name="description" content="Java編程,Spring Struts Webwork框架深入,XMLHTTP AJAX開發,Java Web開發,Java企業應用,Java設計模式,Java開源框架,Java應用服務器,Rich Client討論,Ruby編程,Ruby DSL開發,Ruby on rails實踐,JavaScript編程,敏捷軟件開發XP TDD,軟件配置管理,軟件測試,項目管理UML,數據庫,C#/.net C/C++ Erlang/FP PHP/Linux平臺,精通Hibernate" />   
          7.     <meta name="keywords"  content="Java編程 Spring框架 AJAX技術 Agile敏捷軟件開發 ruby on rails實踐 JavaEye深度技術社區" />   
          8.     <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />   
          9.     <link href="/rss" rel="alternate" title="JavaEye技術網站RSS頻道訂閱" type="application/rss+xml" />   
          10.     <link  />   
          11.        
          12.   </head>   
          13.   
          14. ...省略,證明以上代碼已經成功  
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">   <head>     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>     <title>JavaEye Java編程 Spring框架 AJAX技術 Agile敏捷軟件開發 ruby on rails實踐 - JavaEye做最棒的軟件開發交流社區</title>     <meta name="description" content="Java編程,Spring Struts Webwork框架深入,XMLHTTP AJAX開發,Java Web開發,Java企業應用,Java設計模式,Java開源框架,Java應用服務器,Rich Client討論,Ruby編程,Ruby DSL開發,Ruby on rails實踐,JavaScript編程,敏捷軟件開發XP TDD,軟件配置管理,軟件測試,項目管理UML,數據庫,C#/.net C/C++ Erlang/FP PHP/Linux平臺,精通Hibernate" />     <meta name="keywords"  content="Java編程 Spring框架 AJAX技術 Agile敏捷軟件開發 ruby on rails實踐 JavaEye深度技術社區" />     <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />     <link href="/rss" rel="alternate" title="JavaEye技術網站RSS頻道訂閱" type="application/rss+xml" />     <link  media="screen" rel="stylesheet" type="text/css" />        </head>  ...省略,證明以上代碼已經成功

           當然這個只是大刀一小試。現在還離我的目標差一點點:

          需要做個頭,我還不太清楚有什么頭可以使用,那樣我又寫了個程序看看IE的頭到底是怎樣子的,

          沒有抓包程序,只好自已寫個程序:

           

          Java代碼 復制代碼 收藏代碼
          1. ServerSocket socketServer = new ServerSocket(10086);   
          2. Socket client = socketServer.accept();   
          3. InputStream inClient = client.getInputStream();   
          4. Scanner inScn = new Scanner(inClient);   
          5. while(inScn.hasNextLine()){   
          6.     System.out.println(inScn.nextLine());   
          7. }   
          8. inScn.close();   
          9. client.close();   
          10. socketServer.close();  
          		ServerSocket socketServer = new ServerSocket(10086); 		Socket client = socketServer.accept(); 		InputStream inClient = client.getInputStream(); 		Scanner inScn = new Scanner(inClient); 		while(inScn.hasNextLine()){ 			System.out.println(inScn.nextLine()); 		} 		inScn.close(); 		client.close(); 		socketServer.close();

           

          在IE地址欄上輸入:

          http://locahost:10086/

          點確定后可以得到程序輸出:

           

          Java代碼 復制代碼 收藏代碼
          1. GET / HTTP/1.1  
          2. Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*   
          3. Accept-Language: zh-CN   
          4. User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)   
          5. Accept-Encoding: gzip, deflate   
          6. Host: localhost:10086  
          7. Connection: Keep-Alive  
          GET / HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Accept-Encoding: gzip, deflate Host: localhost:10086 Connection: Keep-Alive

           

          分析請求包中這六個頭信息。可以參考以下文章:

          http://zsxxsz.iteye.com/blog/568250

           

          現在我使用HC模擬IE的請求,修改后代碼如下:

          Java代碼 復制代碼 收藏代碼
          1. HttpClient httpClient = new DefaultHttpClient();   
          2.         HttpGet get = new HttpGet("http://www.iteye.com");   
          3.            
          4.         get.setHeader("Accept", "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");   
          5.         get.setHeader("Accept-Language","zh-CN");   
          6.         get.setHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)");   
          7.         get.setHeader("Accept-Encoding","gzip, deflate");   
          8.         get.setHeader("Host","you never be know");   
          9.         get.setHeader("Connection","Keep-Alive");   
          10.            
          11.         HttpResponse response = httpClient.execute(get);  

          posted on 2012-11-08 02:45 奮斗成就男人 閱讀(629) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 茌平县| 理塘县| 滦南县| 陇西县| 车险| 若羌县| 肥东县| 鹤庆县| 张家川| 玉山县| 青岛市| 临武县| 剑河县| 保亭| 临江市| 稷山县| 京山县| 栖霞市| 德州市| 辽源市| 松桃| 邹平县| 丰原市| 集安市| 包头市| 石楼县| 陆良县| 太谷县| 太白县| 娄烦县| 织金县| 辛集市| 汉川市| 若尔盖县| 浮梁县| 南丹县| 墨玉县| 凤阳县| 衡山县| 南澳县| 永川市|