yxhxj2006

          常用鏈接

          統(tǒng)計

          最新評論

          HttpClient使用

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

           

          使用庫:Apache Http Client

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

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

          http://hc.apache.org/

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

           

          現(xiàn)在導(dǎo)入兩個jar包:

          httpclient-4.0.jar

          httpcore-4.0.jar

          httpmime-4.0.jar

           

          開始一個請求代碼如下:

          Java代碼 復(fù)制代碼 收藏代碼
          1. HttpClient httpClient = new DefaultHttpClient();   
          2. //構(gòu)造請求,如果想使用POST則new一個HttpPost   
          3.         HttpGet get = new HttpGet("http://www.iteye.com");   
          4.         HttpResponse response = httpClient.execute(get);   
          5. //先從響應(yīng)頭得到實體   
          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(); //構(gòu)造請求,如果想使用POST則new一個HttpPost 		HttpGet get = new HttpGet("http://www.iteye.com"); 		HttpResponse response = httpClient.execute(get); //先從響應(yīng)頭得到實體 		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代碼 復(fù)制代碼 收藏代碼
          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技術(shù) Agile敏捷軟件開發(fā) ruby on rails實踐 - JavaEye做最棒的軟件開發(fā)交流社區(qū)</title>   
          6.     <meta name="description" content="Java編程,Spring Struts Webwork框架深入,XMLHTTP AJAX開發(fā),Java Web開發(fā),Java企業(yè)應(yīng)用,Java設(shè)計模式,Java開源框架,Java應(yīng)用服務(wù)器,Rich Client討論,Ruby編程,Ruby DSL開發(fā),Ruby on rails實踐,JavaScript編程,敏捷軟件開發(fā)XP TDD,軟件配置管理,軟件測試,項目管理UML,數(shù)據(jù)庫,C#/.net C/C++ Erlang/FP PHP/Linux平臺,精通Hibernate" />   
          7.     <meta name="keywords"  content="Java編程 Spring框架 AJAX技術(shù) Agile敏捷軟件開發(fā) ruby on rails實踐 JavaEye深度技術(shù)社區(qū)" />   
          8.     <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />   
          9.     <link href="/rss" rel="alternate" title="JavaEye技術(shù)網(wǎng)站RSS頻道訂閱" type="application/rss+xml" />   
          10.     <link  />   
          11.        
          12.   </head>   
          13.   
          14. ...省略,證明以上代碼已經(jīng)成功  
          <!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技術(shù) Agile敏捷軟件開發(fā) ruby on rails實踐 - JavaEye做最棒的軟件開發(fā)交流社區(qū)</title>     <meta name="description" content="Java編程,Spring Struts Webwork框架深入,XMLHTTP AJAX開發(fā),Java Web開發(fā),Java企業(yè)應(yīng)用,Java設(shè)計模式,Java開源框架,Java應(yīng)用服務(wù)器,Rich Client討論,Ruby編程,Ruby DSL開發(fā),Ruby on rails實踐,JavaScript編程,敏捷軟件開發(fā)XP TDD,軟件配置管理,軟件測試,項目管理UML,數(shù)據(jù)庫,C#/.net C/C++ Erlang/FP PHP/Linux平臺,精通Hibernate" />     <meta name="keywords"  content="Java編程 Spring框架 AJAX技術(shù) Agile敏捷軟件開發(fā) ruby on rails實踐 JavaEye深度技術(shù)社區(qū)" />     <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />     <link href="/rss" rel="alternate" title="JavaEye技術(shù)網(wǎng)站RSS頻道訂閱" type="application/rss+xml" />     <link  media="screen" rel="stylesheet" type="text/css" />        </head>  ...省略,證明以上代碼已經(jīng)成功

           當(dāng)然這個只是大刀一小試?,F(xiàn)在還離我的目標(biāo)差一點點:

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

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

           

          Java代碼 復(fù)制代碼 收藏代碼
          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代碼 復(fù)制代碼 收藏代碼
          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

           

          分析請求包中這六個頭信息??梢詤⒖家韵挛恼拢?/p>

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

           

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

          Java代碼 復(fù)制代碼 收藏代碼
          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 奮斗成就男人 閱讀(628) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 获嘉县| 远安县| 芦山县| 扎囊县| 吉隆县| 抚州市| 宁阳县| 甘德县| 晋州市| 阿拉善右旗| 玉田县| 襄汾县| 静乐县| 通化县| 元朗区| 安新县| 鞍山市| 通榆县| 神木县| 岳池县| 莱芜市| 大埔区| 肇庆市| 浦江县| 格尔木市| 鹤峰县| 岑溪市| 新昌县| 河池市| 陵水| 肇州县| 宁南县| 夏河县| 阿巴嘎旗| 咸宁市| 毕节市| 思南县| 易门县| 盈江县| 萨嘎县| 马尔康县|