欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
httpclient教程
Commons-httpclient項目就是專(zhuān)門(mén)設計來(lái)簡(jiǎn)化HTTP客戶(hù)端與服務(wù)器進(jìn)行各種通訊編程。


1. 讀取網(wǎng)頁(yè)(HTTP/HTTPS)內容

   最簡(jiǎn)單的HTTP客戶(hù)端,用來(lái)演示通過(guò)GET或者POST方式訪(fǎng)問(wèn)某個(gè)頁(yè)面

Java代碼
  1. package http.demo;   
  2.   
  3. import java.io.IOException;   
  4. import org.apache.commons.httpclient.*;   
  5. import org.apache.commons.httpclient.methods.*;   
  6.   
  7. public class SimpleClient {   
  8.   
  9.     public static void main(String[] args) throws IOException   
  10.     {   
  11.         HttpClient client = new HttpClient();      
  12.   
  13.         //設置代理服務(wù)器地址和端口       
  14.   
  15.         //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);   
  16.   
  17.         //使用GET方法,如果服務(wù)器需要通過(guò)HTTPS連接,那只需要將下面URL中的http換成https   
  18.   
  19.         HttpMethod method = new GetMethod("http://java.sun.com");   
  20.   
  21.         //使用POST方法   
  22.   
  23.         //HttpMethod method = new PostMethod("http://java.sun.com");   
  24.   
  25.         client.executeMethod(method);   
  26.   
  27.         //打印服務(wù)器返回的狀態(tài)   
  28.   
  29.         System.out.println(method.getStatusLine());   
  30.   
  31.         //打印返回的信息   
  32.   
  33.         System.out.println(method.getResponseBodyAsString());   
  34.   
  35.         //釋放連接   
  36.   
  37.         method.releaseConnection();   
  38.   
  39.     }   
  40. }  


2. 以GET或者POST方式向網(wǎng)頁(yè)提交參數


Java代碼
  1. package http.demo;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import org.apache.commons.httpclient.*;   
  6.   
  7. import org.apache.commons.httpclient.methods.*;   
  8.   
  9. /**  
  10.  
  11. * 提交參數演示  
  12.  
  13. * 該程序連接到一個(gè)用于查詢(xún)手機號碼所屬地的頁(yè)面  
  14.  
  15. * 以便查詢(xún)號碼段1330227所在的省份以及城市  
  16.  
  17. */  
  18.   
  19. public class SimpleHttpClient {   
  20.   
  21.     public static void main(String[] args) throws IOException   
  22.   
  23.     {   
  24.   
  25.         HttpClient client = new HttpClient();   
  26.   
  27.         client.getHostConfiguration().setHost("www.imobile.com.cn"80"http");   
  28.   
  29.         HttpMethod method = getPostMethod();//使用POST方式提交數據   
  30.   
  31.         client.executeMethod(method);   
  32.   
  33.        //打印服務(wù)器返回的狀態(tài)   
  34.   
  35.         System.out.println(method.getStatusLine());   
  36.   
  37.         //打印結果頁(yè)面   
  38.   
  39.         String response =   
  40.   
  41.            new String(method.getResponseBodyAsString().getBytes("8859_1"));   
  42.   
  43.        //打印返回的信息   
  44.   
  45.         System.out.println(response);   
  46.   
  47.         method.releaseConnection();   
  48.   
  49.     }   
  50.   
  51.     /**  
  52.  
  53.      * 使用GET方式提交數據  
  54.  
  55.      * @return  
  56.  
  57.      */  
  58.   
  59.     private static HttpMethod getGetMethod(){   
  60.   
  61.         return new GetMethod("/simcard.php?simcard=1330227");   
  62.   
  63.     }   
  64.   
  65.     /**  
  66.  
  67.      * 使用POST方式提交數據  
  68.  
  69.      * @return  
  70.  
  71.      */  
  72.   
  73.     private static HttpMethod getPostMethod(){   
  74.   
  75.         PostMethod post = new PostMethod("/simcard.php");   
  76.   
  77.         NameValuePair simcard = new NameValuePair("simcard","1330227");   
  78.   
  79.         post.setRequestBody(new NameValuePair[] { simcard});   
  80.   
  81.         return post;   
  82.   
  83.     }   
  84.   
  85. }  



3. 處理頁(yè)面重定向

詳細描述:

狀態(tài)碼  對應HttpServletResponse的常量

301   SC_MOVED_PERMANENTLY  頁(yè)面已經(jīng)永久移到另外一個(gè)新地址

302   SC_MOVED_TEMPORARILY  頁(yè)面暫時(shí)移動(dòng)到另外一個(gè)新的地址

303   SC_SEE_OTHER  客戶(hù)端請求的地址必須通過(guò)另外的URL來(lái)訪(fǎng)問(wèn)

307   SC_TEMPORARY_REDIRECT  同 SC_MOVED_TEMPORARILY


下面的代碼片段演示如何處理頁(yè)面的重定向

Java代碼
  1. client.executeMethod(post);   
  2.   
  3. System.out.println(post.getStatusLine().toString());   
  4.   
  5. post.releaseConnection();   
  6.   
  7. //檢查是否重定向   
  8.   
  9. int statuscode = post.getStatusCode();   
  10.   
  11. if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||   
  12.   
  13.     (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||   
  14.   
  15.     (statuscode == HttpStatus.SC_SEE_OTHER) ||   
  16.   
  17.     statuscode == HttpStatus.SC_TEMPORARY_REDIRECT))    
  18.   
  19.   
  20.     //讀取新的URL地址   
  21.   
  22.     Header header = post.getResponseHeader("location");   
  23.   
  24.     if (header != null)   
  25.     {   
  26.   
  27.         String newuri = header.getValue();   
  28.   
  29.         if ((newuri == null) || (newuri.equals("")))   
  30.   
  31.                    newuri = "/";   
  32.   
  33.   
  34.         GetMethod redirect = new GetMethod(newuri);   
  35.   
  36.         client.executeMethod(redirect);   
  37.   
  38.         System.out.println("Redirect:"+   
  39.                  redirect.getStatusLine().toString());   
  40.   
  41.         redirect.releaseConnection();   
  42.   
  43.     } else  
  44.   
  45.          System.out.println("Invalid redirect");   
  46.   
  47.    }   


4. 模擬輸入用戶(hù)名和口令進(jìn)行登錄


     本小節應該說(shuō)是HTTP客戶(hù)端編程中最常碰見(jiàn)的問(wèn)題,很多網(wǎng)站的內容都只是對注冊用戶(hù)可見(jiàn)的,這種情況下就必須要求使用正確的用戶(hù)名和口令登錄成功后,方可瀏覽到想要的頁(yè)面。因為HTTP協(xié)議是無(wú)狀態(tài)的,也就是連接的有效期只限于當前請求,請求內容結束后連接就關(guān)閉了。在這種情況下為了保存用戶(hù)的登錄信息必須使用到Cookie機制。以JSP/Servlet為例,當瀏覽器請求一個(gè)JSP或者是Servlet的頁(yè)面時(shí),應用服務(wù)器會(huì )返回一個(gè)參數,名為jsessionid(因不同應用服務(wù)器而異),值是一個(gè)較長(cháng)的唯一字符串的Cookie,這個(gè)字符串值也就是當前訪(fǎng)問(wèn)該站點(diǎn)的會(huì )話(huà)標識。瀏覽器在每訪(fǎng)問(wèn)該站點(diǎn)的其他頁(yè)面時(shí)候都要帶上jsessionid這樣的Cookie信息,應用服務(wù)器根據讀取這個(gè)會(huì )話(huà)標識來(lái)獲取對應的會(huì )話(huà)信息。

     對于需要用戶(hù)登錄的網(wǎng)站,一般在用戶(hù)登錄成功后會(huì )將用戶(hù)資料保存在服務(wù)器的會(huì )話(huà)中,這樣當訪(fǎng)問(wèn)到其他的頁(yè)面時(shí)候,應用服務(wù)器根據瀏覽器送上的Cookie中讀取當前請求對應的會(huì )話(huà)標識以獲得對應的會(huì )話(huà)信息,然后就可以判斷用戶(hù)資料是否存在于會(huì )話(huà)信息中,如果存在則允許訪(fǎng)問(wèn)頁(yè)面,否則跳轉到登錄頁(yè)面中要求用戶(hù)輸入賬號和口令進(jìn)行登錄。這就是一般使用JSP開(kāi)發(fā)網(wǎng)站在處理用戶(hù)登錄的比較通用的方法。
 
     對于HTTP的客戶(hù)端來(lái)講,如果要訪(fǎng)問(wèn)一個(gè)受保護的頁(yè)面時(shí)就必須模擬瀏覽器所做的工作,首先就是請求登錄頁(yè)面,然后讀取Cookie值;再次請求登錄頁(yè)面并加入登錄頁(yè)所需的每個(gè)參數;最后就是請求最終所需的頁(yè)面。當然在除第一次請求外其他的請求都需要附帶上 Cookie信息以便服務(wù)器能判斷當前請求是否已經(jīng)通過(guò)驗證。


Java代碼
  1. package http.demo;   
  2.   
  3. import org.apache.commons.httpclient.*;   
  4.   
  5. import org.apache.commons.httpclient.cookie.*;   
  6.   
  7. import org.apache.commons.httpclient.methods.*;   
  8.   
  9. /**  
  10.  
  11. * 用來(lái)演示登錄表單的示例  
  12.  
  13. */  
  14.   
  15. public class FormLoginDemo {   
  16.   
  17.     static final String LOGON_SITE = "localhost";   
  18.   
  19.     static final int    LOGON_PORT = 8080;   
  20.   
  21.       
  22.   
  23.     public static void main(String[] args) throws Exception{   
  24.   
  25.         HttpClient client = new HttpClient();   
  26.   
  27.         client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);   
  28.   
  29.          
  30.   
  31.        //模擬登錄頁(yè)面login.jsp->main.jsp   
  32.   
  33.         PostMethod post = new PostMethod("/main.jsp");   
  34.   
  35.         NameValuePair name = new NameValuePair("name""ld");       
  36.   
  37.         NameValuePair pass = new NameValuePair("password""ld");       
  38.   
  39.         post.setRequestBody(new NameValuePair[]{name,pass});   
  40.   
  41.        int status = client.executeMethod(post);   
  42.   
  43.         System.out.println(post.getResponseBodyAsString());   
  44.   
  45.         post.releaseConnection();   
  46.   
  47.          
  48.   
  49.        //查看cookie信息   
  50.   
  51.         CookieSpec cookiespec = CookiePolicy.getDefaultSpec();   
  52.   
  53.         Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/"false, client.getState().getCookies());   
  54.   
  55.        if (cookies.length == 0) {   
  56.   
  57.            System.out.println("None");      
  58.   
  59.        } else {   
  60.   
  61.            for (int i = 0; i < cookies.length; i++) {   
  62.   
  63.                System.out.println(cookies[i].toString());      
  64.   
  65.            }   
  66.   
  67.        }   
  68.   
  69.        //訪(fǎng)問(wèn)所需的頁(yè)面main2.jsp   
  70.   
  71.         GetMethod get = new GetMethod("/main2.jsp");   
  72.   
  73.         client.executeMethod(get);   
  74.   
  75.         System.out.println(get.getResponseBodyAsString());   
  76.   
  77.         get.releaseConnection();   
  78.   
  79.     }   
  80.   
  81. }  


5. 提交XML格式參數

提交XML格式的參數很簡(jiǎn)單,僅僅是一個(gè)提交時(shí)候的ContentType問(wèn)題,下面的例子演示從文件文件中讀取XML信息并提交給服務(wù)器的過(guò)程,該過(guò)程可以用來(lái)測試Web服務(wù)。

Java代碼
  1. import java.io.File;   
  2.   
  3. import java.io.FileInputStream;   
  4.   
  5. import org.apache.commons.httpclient.HttpClient;   
  6.   
  7. import org.apache.commons.httpclient.methods.EntityEnclosingMethod;   
  8.   
  9. import org.apache.commons.httpclient.methods.PostMethod;   
  10.   
  11. /**  
  12.  
  13. * 用來(lái)演示提交XML格式數據的例子  
  14.  
  15. */  
  16.   
  17. public class PostXMLClient {   
  18.   
  19.     public static void main(String[] args) throws Exception {   
  20.   
  21.         File input = new File(“test.xml”);   
  22.   
  23.         PostMethod post = new PostMethod(“http://localhost:8080/httpclient/xml.jsp”);   
  24.   
  25.         // 設置請求的內容直接從文件中讀取   
  26.   
  27.         post.setRequestBody(new FileInputStream(input));   
  28.   
  29.           
  30.   
  31.         if (input.length() < Integer.MAX_VALUE)   
  32.   
  33.             post.setRequestContentLength(input.length());   
  34.   
  35.         else            post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);   
  36.   
  37.           
  38.   
  39.         // 指定請求內容的類(lèi)型   
  40.   
  41.         post.setRequestHeader("Content-type""text/xml; charset=GBK");   
  42.   
  43.           
  44.   
  45.         HttpClient httpclient = new HttpClient();   
  46.   
  47.         int result = httpclient.executeMethod(post);   
  48.   
  49.         System.out.println("Response status code: " + result);   
  50.   
  51.         System.out.println("Response body: ");   
  52.   
  53.         System.out.println(post.getResponseBodyAsString());   
  54.   
  55.         post.releaseConnection();   
  56.   
  57.     }   
  58.   
  59. }  


6. 通過(guò)HTTP上傳文件

        httpclient使用了單獨的一個(gè)HttpMethod子類(lèi)來(lái)處理文件的上傳,這個(gè)類(lèi)就是MultipartPostMethod,該類(lèi)已經(jīng)封裝了文件上傳的細節,我們要做的僅僅是告訴它我們要上傳文件的全路徑即可,下面的代碼片段演示如何使用這個(gè)類(lèi)。

Java代碼
  1. MultipartPostMethod filePost = new MultipartPostMethod(targetURL);   
  2.   
  3. filePost.addParameter("fileName", targetFilePath);   
  4.   
  5. HttpClient client = new HttpClient();   
  6.   
  7. //由于要上傳的文件可能比較大,因此在此設置最大的連接超時(shí)時(shí)間   
  8.   
  9. client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);   
  10.   
  11. int status = client.executeMethod(filePost);  


上面代碼中,targetFilePath即為要上傳的文件所在的路徑。

7. 訪(fǎng)問(wèn)啟用認證的頁(yè)面

     我們經(jīng)常會(huì )碰到這樣的頁(yè)面,當訪(fǎng)問(wèn)它的時(shí)候會(huì )彈出一個(gè)瀏覽器的對話(huà)框要求輸入用戶(hù)名和密碼后方可,這種用戶(hù)認證的方式不同于我們在前面介紹的基于表單的用戶(hù)身份驗證。

    這是HTTP的認證策略,httpclient支持三種認證方式包括: 基本、摘要以及NTLM認證。

    其中基本認證最簡(jiǎn)單、通用但也最不安全;摘要認證是在HTTP 1.1中加入的認證方式,
而NTLM則是微軟公司定義的而不是通用的規范,最新版本的NTLM是比摘要認證還要安全的一種方式。


Java代碼
  1. import org.apache.commons.httpclient.HttpClient;   
  2.   
  3. import org.apache.commons.httpclient.UsernamePasswordCredentials;   
  4.   
  5. import org.apache.commons.httpclient.methods.GetMethod;   
  6.   
  7. public class BasicAuthenticationExample {   
  8.   
  9.     public BasicAuthenticationExample() {   
  10.   
  11.     }   
  12.   
  13.     public static void main(String[] args) throws Exception {   
  14.   
  15.         HttpClient client = new HttpClient();   
  16.   
  17.         client.getState().setCredentials(   
  18.   
  19.             "www.verisign.com",   
  20.   
  21.             "realm",   
  22.   
  23.             new UsernamePasswordCredentials("username""password")   
  24.   
  25.         );   
  26.   
  27.         GetMethod get = new GetMethod("https://www.verisign.com/products/index.html");   
  28.   
  29.         get.setDoAuthentication( true );   
  30.   
  31.         int status = client.executeMethod( get );   
  32.   
  33.         System.out.println(status+""+ get.getResponseBodyAsString());   
  34.   
  35.         get.releaseConnection();   
  36.   
  37.     }   
  38.   
  39. }  


8. 多線(xiàn)程模式下使用httpclient
  
    多線(xiàn)程同時(shí)訪(fǎng)問(wèn)httpclient,例如同時(shí)從一個(gè)站點(diǎn)上下載多個(gè)文件。對于同一個(gè)HttpConnection 同一個(gè)時(shí)間只能有一個(gè)線(xiàn)程訪(fǎng)問(wèn),為了保證多線(xiàn)程工作環(huán)境下不產(chǎn)生沖突,httpclient使用了一個(gè)多線(xiàn)程連接管理器類(lèi):MultiThreadedHttpConnectionManager,要使用這個(gè)類(lèi)很簡(jiǎn)單,只需要在構造HttpClient實(shí)例的時(shí)候傳入即可,代碼如下:

Java代碼
  1. MultiThreadedHttpConnectionManager connectionManager =   
  2.   
  3.    new MultiThreadedHttpConnectionManager();   
  4.   
  5. HttpClient client = new HttpClient(connectionManager);  


以后盡管訪(fǎng)問(wèn)client實(shí)例即可。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
用HttpClient來(lái)模擬瀏覽器GET POST
HttpClient登錄人人網(wǎng)
HttpClient中使用代理連接
運用Apache HttpClient實(shí)作Get與Post動(dòng)作 - 小嘴冰涼 - ITey...
Apache Commons工具集簡(jiǎn)介
httpclient 學(xué)習測試 實(shí)例 示例
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久