天天看點

httpclient學習

Commons-httpclient椤圭洰灏辨槸涓撻棬璁捐鏉ョ畝鍖朒TTP瀹㈡埛绔笌鏈嶅姟鍣ㄨ繘琛屽悇绉嶉€氳缂栫▼銆傞€氳繃瀹冨彲浠ヨ鍘熸潵寰堝ご鐤肩殑浜嬫儏鐜闆湪杞繪澗鐨勮В鍐籌紝渚嬪浣犱笉鍐嶇鏄疕TTP鎴栬€匟TTPS鐨勯€氳鏂瑰紡锛屽憡璇夊畠浣犳兂浣跨敤HTTPS鏂瑰紡锛屽墿涓嬬殑浜嬫儏浜ょ粰httpclient鏇誇綘瀹屾垚銆傛湰鏂囦細閽堝鎴戜滑鍦ㄧ紪鍐橦TTP瀹㈡埛绔▼搴忔椂缁忓父纰闆埌鐨勫嚑涓棶棰樿繘琛屽垎鍒粙缁嶅浣曚嬌鐢╤ttpclient鏉ヨВ鍐沖畠浠紝涓轟簡璁╄鑰呮洿蹇殑鐔熸倝杩欎釜椤圭洰鎴戜滑鏈€寮€濮嬪厛缁欏嚭涓€涓畝鍗曠殑渚嬪瓙鏉ヨ鍙栦竴涓綉椤電殑鍐呭锛岀劧鍚庡驚搴忔笎杩涜В鍐蟲帀鍓嶈繘涓殑鎵€鏈夐棶棰樸€?

1锛幝犺鍙栫綉椤?HTTP/HTTPS)鍐呭

涓嬮潰鏄垜浠粰鍑虹殑涓€涓畝鍗曠殑渚嬪瓙鐢ㄦ潵璁塊棶鏌愪釜椤甸潰

package http.demo; 
import java.io.IOException; 
import org.apache.commons.httpclient.*; 
import org.apache.commons.httpclient.methods.*;
/** 
 *鏈€绠€鍗曠殑HTTP瀹㈡埛绔?鐢ㄦ潵婕旂ず閫氳繃GET鎴栬€匬OST鏂瑰紡璁塊棶鏌愪釜椤甸潰
  *@authorLiudong
*/
public class SimpleClient {
public static void main(String[] args) throws IOException 
{
  HttpClient client = new HttpClient(); 
      // 璁劇疆浠g悊鏈嶅姟鍣ㄥ湴鍧€鍜岀鍙?     
      //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port); 
      // 浣跨敤 GET 鏂規硶 锛屽鏋滄湇鍔″櫒闇€瑕侀€氳繃 HTTPS 杩炴帴锛岄偅鍙渶瑕佸皢涓嬮潰 URL 涓殑 http 鎹㈡垚 https 
         HttpMethodmethod=newGetMethod("http://java.sun.com");
      //浣跨敤POST鏂規硶
      //HttpMethod method = new PostMethod("http://java.sun.com");
      client.executeMethod(method);

      //鎵撳嵃鏈嶅姟鍣ㄨ繑鍥炵殑鐘舵€?       System.out.println(method.getStatusLine());
      //鎵撳嵃杩斿洖鐨勪俊鎭?      System.out.println(method.getResponseBodyAsString());
      //閲婃斁杩炴帴
      method.releaseConnection();
   }
}
           

鍦ㄨ繖涓緥瀛愪腑棣栧厛鍒涘緩涓€涓狧TTP瀹㈡埛绔?HttpClient)鐨勫疄渚嬶紝鐒跺悗閫夋嫨鎻愪氦鐨勬柟娉曟槸GET鎴栬€匬OST锛屾渶鍚庡湪HttpClient瀹炰緥涓婃墽琛屾彁浜ょ殑鏂規硶锛屾渶鍚庝粠鎵€閫夋嫨鐨勬彁浜ゆ柟娉曚腑璇誨彇鏈嶅姟鍣ㄥ弽棣堝洖鏉ョ殑缁撴灉銆傝繖灏辨槸浣跨敤HttpClient鐨勫熀鏈祦绋嬨€傚叾瀹炵敤涓€琛屼唬鐮佷篃灏卞彲浠ユ悶瀹氭暣涓姹傜殑杩囩▼锛岄潪甯哥殑绠€鍗曪紒

2锛幝犱互GET鎴栬€匬OST鏂瑰紡鍚戠綉椤墊彁浜ゅ弬鏁?

鍏跺疄鍓嶉潰涓€涓渶绠€鍗曠殑绀轟緥涓垜浠凡缁忎粙缁嶄簡濡備綍浣跨敤GET鎴栬€匬OST鏂瑰紡鏉ヨ姹備竴涓〉闈紝鏈皬鑺備笌涔嬩笉鍚岀殑鏄浜嗘彁浜ゆ椂璁懼畾椤甸潰鎵€闇€鐨勫弬鏁幫紝鎴戜滑鐭ラ亾濡傛灉鏄疓ET鐨勮姹傛柟寮忥紝閭d箞鎵€鏈夊弬鏁伴兘鐩存帴鏀懼埌椤甸潰鐨刄RL鍚庨潰鐢ㄩ棶鍙蜂笌椤甸潰鍦闆潃闅斿紑锛屾瘡涓弬鏁扮敤&闅斿紑锛屼緥濡傦細http://java.sun.com/?name=liudong&mobile=123456锛屼絾鏄綋浣跨敤POST鏂規硶鏃跺氨浼氱◢寰湁涓€鐐圭偣楹葷儲銆傛湰灏忚妭鐨勪緥瀛愭紨绀哄悜濡備綍鏌ヨ鎵嬫満鍙風爜鎵€鍦ㄧ殑鍩庡競锛屼唬鐮佸涓嬶細

package http.demo; 
import java.io.IOException; 
import org.apache.commons.httpclient.*; 
import org.apache.commons.httpclient.methods.*;
/** 
 *鎻愪氦鍙傛暟婕旂ず
 *璇ョ▼搴忚繛鎺ュ埌涓€涓敤浜庢煡璇㈡墜鏈哄彿鐮佹墍灞炲湴鐨勯〉闈? *浠ヤ究鏌ヨ鍙風爜娈?330227鎵€鍦ㄧ殑鐪佷喚浠ュ強鍩庡競
 *@authorLiudong
 */
public class SimpleHttpClient { 
   public static void main(String[] args) throws IOException {
      HttpClient client = new HttpClient();
      client.getHostConfiguration().setHost( "www.imobile.com.cn" , 80, "http" );
      method = getPostMethod();    // 浣跨敤 POST 鏂瑰紡鎻愪氦鏁版嵁 
      client.executeMethod(method);   //鎵撳嵃鏈嶅姟鍣ㄨ繑鍥炵殑鐘舵€?
      System.out.println(method.getStatusLine());   //鎵撳嵃缁撴灉椤甸潰
      Stringresponse=newString(method.getResponseBodyAsString().getBytes("8859_1"));

      //鎵撳嵃杩斿洖鐨勪俊鎭?      System.out.println(response);
      method.releaseConnection();
   }
   /** 
    * 浣跨敤 GET 鏂瑰紡鎻愪氦鏁版嵁 
    *@return 
    */

   privatestaticHttpMethodgetGetMethod(){
      returnnewGetMethod("/simcard.php?simcard=1330227");
   }
    /** 
     * 浣跨敤 POST 鏂瑰紡鎻愪氦鏁版嵁 
     *@return 
     */
    private static HttpMethod getPostMethod(){
      PostMethod post = new PostMethod( "/simcard.php" );
      NameValuePair simcard = new NameValuePair( "simcard" , "1330227" );
      post.setRequestBody( new NameValuePair[] { simcard});
      return post; 
   } 
}
           

鍦ㄤ笂闈㈢殑渚嬪瓙涓〉闈?http://www.imobile.com.cn/simcard.php 闇€瑕佷竴涓弬鏁版槸simcard锛岃繖涓弬鏁闆€間負鎵嬫満鍙風爜娈碉紝鍗蟲墜鏈哄彿鐮佺殑鍓嶄竷浣嶏紝鏈嶅姟鍣ㄤ細杩斿洖鎻愪氦鐨勬墜鏈哄彿鐮佸搴旂殑鐪佷喚銆佸煄甯備互鍙婂叾浠栬缁嗕俊鎭€侴ET鐨勬彁浜ゆ柟娉曞彧闇€瑕佸湪URL鍚庡姞鍏ュ弬鏁頒俊鎭紝鑰孭OST鍒欓渶瑕侀€氳繃NameValuePair绫繪潵璁劇疆鍙傛暟鍚嶇О鍜屽畠鎵€瀵瑰簲鐨勫€箋€?

3锛幝犲鐞嗛〉闈㈤噸瀹氬悜

鍦↗SP/Servlet缂栫▼涓璻esponse.sendRedirect鏂規硶灏辨槸浣跨敤HTTP鍗忚涓殑閲嶅畾鍚戞満鍒躲€傚畠涓嶫SP涓殑<jsp:forward 鈥?gt;鐨勫尯鍒湪浜庡悗鑰呮槸鍦ㄦ湇鍔″櫒涓疄鐜伴〉闈㈢殑璺寵漿锛屼篃灏辨槸璇村簲鐢ㄥ鍣ㄥ姞杞戒簡鎵€瑕佽煩杞殑椤甸潰鐨勫唴瀹瑰苟杩斿洖缁欏鎴風锛涜€屽墠鑰呮槸杩斿洖涓€涓姸鎬佺爜锛岃繖浜涚姸鎬佺爜鐨勫彲鑳藉€艱涓嬭〃锛岀劧鍚庡鎴風璇誨彇闇€瑕佽煩杞埌鐨勯〉闈㈢殑URL骞堕噸鏂闆姞杞芥柊鐨勯〉闈€傚氨鏄繖鏍蜂竴涓繃绋嬶紝鎵€浠ユ垜浠紪绋嬬殑鏃跺€欏氨瑕侀€氳繃HttpMethod.getStatusCode()鏂規硶鍒ゆ柇杩斿洖鍊兼槸鍚︿負涓嬭〃涓殑鏌愪釜鍊兼潵鍒ゆ柇鏄惁闇€瑕佽煩杞€傚鏋滃凡缁忕‘璁ら渶瑕佽繘琛岄〉闈㈣煩杞簡锛岄偅涔堝彲浠ラ€氳繃璇誨彇HTTP澶翠腑鐨刲ocation灞炴€ф潵鑾峰彇鏂扮殑鍦闆潃銆?

聽鐘舵€佺爜 聽聽 聽 瀵瑰簲聽HttpServletResponse聽鐨勫父閲?聽 聽 聽 璇︾粏鎻忚堪
聽 301 聽 SC_MOVED_PERMANENTLY 聽 椤甸潰宸茬粡姘鎬箙绉誨埌鍙﹀涓€涓柊鍦闆潃
聽 302 聽 SC_MOVED_TEMPORARILY 聽 椤甸潰鏆傛椂绉誨姩鍒闆彟澶栦竴涓柊鐨勫湴鍧€
聽 303 聽 SC_SEE_OTHER 聽 瀹㈡埛绔姹傜殑鍦闆潃蹇呴』閫氳繃鍙﹀鐨劼燯RL聽鏉ヨ闂?聽 聽
聽 307 聽 SC_TEMPORARY_REDIRECT 聽 鍚屄燬C_MOVED_TEMPORARILY

涓嬮潰鐨勪唬鐮佺墖娈墊紨绀哄浣曞鐞嗛〉闈㈢殑閲嶅畾鍚?

client.executeMethod(post);
System.out.println(post.getStatusLine().toString());
post.releaseConnection();
// 妫€鏌ユ槸鍚﹂噸瀹氬悜
int statuscode = post.getStatusCode();
if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) || (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) || (statuscode == HttpStatus.SC_SEE_OTHER) || (statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
// 璇誨彇鏂扮殑 URL 鍦闆潃 
   Headerheader=post.getResponseHeader("location");
   if (header!=null){
      Stringnewuri=header.getValue();
      if((newuri==null)||(newuri.equals("")))
         newuri="/";
         GetMethodredirect=newGetMethod(newuri);
         client.executeMethod(redirect);
         System.out.println("Redirect:"+redirect.getStatusLine().toString());
         redirect.releaseConnection();
   }else 
    System.out.println("Invalid redirect");
}
           

鎴戜滑鍙互鑷缂栧啓涓や釜JSP椤甸潰锛屽叾涓竴涓〉闈㈢敤response.sendRedirect鏂規硶閲嶅畾鍚戝埌鍙﹀涓€涓〉闈㈢敤鏉ユ祴璇曚笂闈㈢殑渚嬪瓙銆?

4锛幝犳ā鎷熻緭鍏ョ敤鎴峰悕鍜屽彛浠よ繘琛岀櫥褰?

鏈皬鑺傚簲璇ヨ鏄疕TTP瀹㈡埛绔紪绋嬩腑鏈€甯哥瑙佺殑闂锛屽緢澶氱綉绔欑殑鍐呭閮藉彧鏄娉ㄥ唽鐢ㄦ埛鍙鐨勶紝杩欑鎯呭喌涓嬪氨蹇呴』瑕佹眰浣跨敤姝g‘鐨勭敤鎴峰悕鍜屽彛浠ょ櫥褰曟垚鍔熷悗锛屾柟鍙祻瑙堝埌鎯寵鐨勯〉闈€傚洜涓篐TTP鍗忚鏄棤鐘舵€佺殑锛屼篃灏辨槸杩炴帴鐨勬湁鏁堟湡鍙檺浜庡綋鍓嶈姹傦紝璇鋒眰鍐呭缁撴潫鍚庤繛鎺ュ氨鍏抽棴浜嗐€傚湪杩欑鎯呭喌涓嬩負浜嗕繚瀛樼敤鎴風殑鐧誨綍淇℃伅蹇呴』浣跨敤鍒癈ookie鏈哄埗銆備互JSP/Servlet涓轟緥锛屽綋娴忚鍣ㄨ姹備竴涓狫SP鎴栬€呮槸Servlet鐨勯〉闈㈡椂锛屽簲鐢ㄦ湇鍔″櫒浼氳繑鍥炰竴涓弬鏁幫紝鍚嶄負jsessionid锛堝洜涓嶅悓搴旂敤鏈嶅姟鍣ㄨ€屽紓锛夛紝鍊兼槸涓€涓緝闀跨殑鍞竴瀛楃涓茬殑Cookie锛岃繖涓瓧绗︿覆鍊間篃灏辨槸褰撳墠璁塊棶璇ョ珯鐐圭殑浼氳瘽鏍囪瘑銆傛祻瑙堝櫒鍦ㄦ瘡璁塊棶璇ョ珯鐐圭殑鍏朵粬椤甸潰鏃跺€欓兘瑕佸甫涓妀sessionid杩欐牱鐨凜ookie淇℃伅锛屽簲鐢ㄦ湇鍔″櫒鏍規嵁璇誨彇杩欎釜浼氳瘽鏍囪瘑鏉ヨ幏鍙栧搴旂殑浼氳瘽淇℃伅銆?

瀵逛簬闇€瑕佺敤鎴風櫥褰曠殑缃戠珯锛屼竴鑸湪鐢ㄦ埛鐧誨綍鎴愬姛鍚庝細灏嗙敤鎴瘋祫鏂欎繚瀛樺湪鏈嶅姟鍣ㄧ殑浼氳瘽涓紝杩欐牱褰撹闂埌鍏朵粬鐨勯〉闈㈡椂鍊欙紝搴旂敤鏈嶅姟鍣ㄦ牴鎹祻瑙堝櫒閫佷笂鐨凜ookie涓鍙栧綋鍓嶈姹傚搴旂殑浼氳瘽鏍囪瘑浠ヨ幏寰楀搴旂殑浼氳瘽淇℃伅锛岀劧鍚庡氨鍙互鍒ゆ柇鐢ㄦ埛璧勬枡鏄惁瀛樺湪浜庝細璇濅俊鎭腑锛屽鏋滃瓨鍦ㄥ垯鍏佽璁塊棶椤甸潰锛屽惁鍒欒煩杞埌鐧誨綍椤甸潰涓姹傜敤鎴瘋緭鍏ュ笎鍙峰拰鍙d護杩涜鐧誨綍銆傝繖灏辨槸涓€鑸嬌鐢↗SP寮€鍙戠綉绔欏湪澶勭悊鐢ㄦ埛鐧誨綍鐨勬瘮杈冮€氱敤鐨勬柟娉曘€?

杩欐牱涓€鏉ワ紝瀵逛簬HTTP鐨勫鎴風鏉ヨ锛屽鏋滆璁塊棶涓€涓彈淇濇姢鐨勯〉闈㈡椂灏卞繀椤繪ā鎷熸祻瑙堝櫒鎵€鍋氱殑宸ヤ綔锛岄鍏堝氨鏄姹傜櫥褰曢〉闈紝鐒跺悗璇誨彇Cookie鍊鹼紱鍐嶆璇鋒眰鐧誨綍椤甸潰骞跺姞鍏ョ櫥褰曢〉鎵€闇€鐨勬瘡涓弬鏁幫紱鏈€鍚庡氨鏄姹傛渶缁堟墍闇€鐨勯〉闈€傚綋鐒跺湪闄ょ涓€娆¤姹傚鍏朵粬鐨勮姹傞兘闇€瑕侀檮甯︿笂Cookie淇℃伅浠ヤ究鏈嶅姟鍣ㄨ兘鍒ゆ柇褰撳墠璇鋒眰鏄惁宸茬粡閫氳繃楠岃瘉銆傝浜嗚繖涔堝锛屽彲鏄鏋滀綘浣跨敤httpclient鐨勮瘽锛屼綘鐢氳嚦杩炰竴琛屼唬鐮侀兘鏃犻渶澧炲姞锛屼綘鍙渶瑕佸厛浼犻€掔櫥褰曚俊鎭墽琛岀櫥褰曡繃绋嬶紝鐒跺悗鐩存帴璁塊棶鎯寵鐨勯〉闈紝璺熻闂竴涓櫘閫氱殑椤甸潰娌℃湁浠諱綍鍖哄埆锛屽洜涓虹被HttpClient宸茬粡甯綘鍋氫簡鎵€鏈夎鍋氱殑浜嬫儏浜嗭紝澶浜嗭紒涓嬮潰鐨勪緥瀛愬疄鐜頒簡杩欐牱涓€涓闂殑杩囩▼銆?

package http.demo; 
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.*;
import org.apache.commons.httpclient.methods.*; 

/** 
 * 鐢ㄦ潵婕旂ず鐧誨綍琛ㄥ崟鐨勭ず渚?
 * @author Liudong 
 */
public class FormLoginDemo {
   static final String LOGON_SITE = "localhost" ;
   static final int     LOGON_PORT = 8080;

   public static void main(String[] args) throws Exception{
      HttpClient client = new HttpClient();
      client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);

      // 妯℃嫙鐧誨綍椤甸潰 login.jsp->main.jsp
      PostMethod post = new PostMethod( "/main.jsp" );
      NameValuePair name = new NameValuePair( "name" , "ld" );
      NameValuePair pass = new NameValuePair( "password" , "ld" );
      post.setRequestBody( new NameValuePair[]{name,pass});
      int status = client.executeMethod(post);
      System.out.println(post.getResponseBodyAsString());
      post.releaseConnection();

      // 鏌ョ湅 cookie 淇℃伅
      CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
      Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/" , false , client.getState().getCookies());
      if (cookies.length == 0) {
         System.out.println( "None" );
      } else {
         for ( int i = 0; i < cookies.length; i++) {
            System.out.println(cookies[i].toString());
         }
      }

      // 璁塊棶鎵€闇€鐨勯〉闈?main2.jsp 
      GetMethodget=newGetMethod("/main2.jsp");
      client.executeMethod(get);
      System.out.println(get.getResponseBodyAsString());
      get.releaseConnection();
   }
}
           

5锛幝犳彁浜ML鏍煎紡鍙傛暟

鎻愪氦XML鏍煎紡鐨勫弬鏁闆緢绠€鍗曪紝浠呬粎鏄竴涓彁浜ゆ椂鍊欑殑ContentType闂锛屼笅闈㈢殑渚嬪瓙婕旂ず浠庢枃浠舵枃浠朵腑璇誨彇XML淇℃伅骞舵彁浜ょ粰鏈嶅姟鍣ㄧ殑杩囩▼锛岃杩囩▼鍙互鐢ㄦ潵娴嬭瘯Web鏈嶅姟銆?

import java.io.File; 
import java.io.FileInputStream; 
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.methods.EntityEnclosingMethod; 
import org.apache.commons.httpclient.methods.PostMethod;
/** 
 *鐢ㄦ潵婕旂ず鎻愪氦XML鏍煎紡鏁版嵁鐨勪緥瀛?*/
public class PostXMLClient {

   public static void main(String[] args) throws Exception {
      File input = new File(鈥渢est.xml鈥?;
      PostMethod post = new PostMethod(鈥渉ttp://localhost:8080/httpclient/xml.jsp鈥?;

      // 璁劇疆璇鋒眰鐨勫唴瀹圭洿鎺ヤ粠鏂囦歡涓鍙?      post.setRequestBody( new FileInputStream(input)); 
      if (input.length() < Integer.MAX_VALUE)
         post.setRequestContentLength(input.length());
      else
         post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);

      // 鎸囧畾璇鋒眰鍐呭鐨勭被鍨?      post.setRequestHeader( "Content-type" , "text/xml; charset=GBK" );
      HttpClient httpclient = new HttpClient();
      int result = httpclient.executeMethod(post);
      System.out.println( "Response status code: " + result);
      System.out.println( "Response body: " );
      System.out.println(post.getResponseBodyAsString()); 
      post.releaseConnection(); 
   } 
}
           

6锛幝犻€氳繃HTTP涓婁紶鏂囦歡

httpclient浣跨敤浜嗗崟鐙殑涓€涓狧ttpMethod瀛愮被鏉ュ鐞嗘枃浠剁殑涓婁紶锛岃繖涓被灏辨槸MultipartPostMethod锛岃绫誨凡缁忓皝瑁呬簡鏂囦歡涓婁紶鐨勭粏鑺傦紝鎴戜滑瑕佸仛鐨勪粎浠呮槸鍛婅瘔瀹冩垜浠涓婁紶鏂囦歡鐨勫叏璺緞鍗沖彲锛屼笅闈㈢殑浠g爜鐗囨婕旂ず濡備綍浣跨敤杩欎釜绫彙€?

MultipartPostMethod filePost = new MultipartPostMethod(targetURL); 
filePost.addParameter( "fileName" , targetFilePath); 
HttpClient client = new HttpClient();
// 鐢變簬瑕佷笂浼犵殑鏂囦歡鍙兘姣旇緝澶?, 鍥犳鍦ㄦ璁劇疆鏈€澶х殑杩炴帴瓒呮椂鏃堕棿 
client.getHttpConnectionManager(). getParams().setConnectionTimeout(5000); 
int status = client.executeMethod(filePost); 
           

涓婇潰浠g爜涓紝targetFilePath鍗充負瑕佷笂浼犵殑鏂囦歡鎵€鍦ㄧ殑璺緞銆?

7锛幝犺闂惎鐢ㄨ璇佺殑椤甸潰

鎴戜滑缁忓父浼氱鍒拌繖鏍風殑椤甸潰锛屽綋璁塊棶瀹冪殑鏃跺€欎細寮瑰嚭涓€涓祻瑙堝櫒鐨勫璇濇瑕佹眰杈撳叆鐢ㄦ埛鍚嶅拰瀵嗙爜鍚庢柟鍙紝杩欑鐢ㄦ埛璁よ瘉鐨勬柟寮忎笉鍚屼簬鎴戜滑鍦ㄥ墠闈粙缁嶇殑鍩轟簬琛ㄥ崟鐨勭敤鎴瘋韓浠介獙璇併€傝繖鏄疕TTP鐨勮璇佺瓥鐣ワ紝httpclient鏀寔涓夌璁よ瘉鏂瑰紡鍖呮嫭锛氬熀鏈€佹憳瑕佷互鍙奛TLM璁よ瘉銆傚叾涓熀鏈璇佹渶绠€鍗曘€侀€氱敤浣嗕篃鏈€涓嶅畨鍏紱鎽樿璁よ瘉鏄湪HTTP 1.1涓姞鍏ョ殑璁よ瘉鏂瑰紡锛岃€孨TLM鍒欐槸寰蔣鍏徃瀹氫箟鐨勮€屼笉鏄€氱敤鐨勮鑼冿紝鏈€鏂扮増鏈殑NTLM鏄瘮鎽樿璁よ瘉杩樿瀹夊叏鐨勪竴绉嶆柟寮忋€?

涓嬮潰渚嬪瓙鏄粠httpclient鐨凜VS鏈嶅姟鍣ㄤ腑涓嬭澆鐨勶紝瀹冪畝鍗曟紨绀哄浣曡闂竴涓璇佷繚鎶ょ殑椤甸潰锛?

import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.UsernamePasswordCredentials; 
import org.apache.commons.httpclient.methods.GetMethod; 

public class BasicAuthenticationExample { 

   public BasicAuthenticationExample() { 
   }

   public static void main(String[] args) throws Exception {
      HttpClient client = new HttpClient();
      client.getState().setCredentials( "www.verisign.com" , "realm" , new UsernamePasswordCredentials( "username" , "password" ) );

      GetMethod get = new GetMethod( "https://www.verisign.com/products/index.html" );
      get.setDoAuthentication( true );
      int status = client.executeMethod( get );
      System.out.println(status+ "\n" + get.getResponseBodyAsString());
      get.releaseConnection();
   } 
}
           

8锛幝犲绾跨▼妯″紡涓嬩嬌鐢╤ttpclient

澶氱嚎绋嬪悓鏃惰闂甴ttpclient锛屼緥濡傚悓鏃朵粠涓€涓珯鐐逛笂涓嬭澆澶氫釜鏂囦歡銆傚浜庡悓涓€涓狧ttpConnection鍚屼竴涓椂闂村彧鑳芥湁涓€涓嚎绋嬭闂紝涓轟簡淇濊瘉澶氱嚎绋嬪伐浣滅幆澧冧笅涓嶄駭鐢熷啿绐侊紝httpclient浣跨敤浜嗕竴涓绾跨▼杩炴帴绠$悊鍣ㄧ殑绫夥細MultiThreadedHttpConnectionManager锛岃浣跨敤杩欎釜绫誨緢绠€鍗曪紝鍙渶瑕佸湪鏋勯€燞ttpClient瀹炰緥鐨勬椂鍊欎紶鍏ュ嵆鍙紝浠g爜濡備笅锛?

MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
HttpClient client = new HttpClient(connectionManager);
           

浠ュ悗灏界璁塊棶client瀹炰緥鍗沖彲銆?

鍙傝€冿細 http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html