1. 程式人生 > >Java使用HttpClient傳送請求的幾種常用方式

Java使用HttpClient傳送請求的幾種常用方式

使用的jar包有3個,Maven中新增以下依賴:

<dependency>

<groupId>commons-httpclient</groupId>

<artifactId>commons-httpclient</artifactId>

<version>3.1</version>

</dependency>

<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.2</version>

</dependency>

<dependency>

<groupId>commons-codec</groupId>

<artifactId>commons-codec</artifactId>

<version>1.9</version>

</dependency>

1第一種:普通的Get/Post請求,Get請求可以帶引數(無需登陸)

public static String GetHtttpLink(String path) throws Exception {

HttpClient client = new HttpClient();// 開啟新視窗

GetMethod get = new GetMethod(path);//path是請求地址,可以帶引數

int st1 = client.executeMethod(get);

logger.info("執行狀態:" + st1);

String result = get.getResponseBodyAsString();//服務端返回的Response

get.releaseConnection();//釋放連結

return result;

}

public static String PostHtttpLink(String path) throws Exception {

HttpClient client = new HttpClient();// 開啟新視窗

PostMethod po = new PostMethod(path);

int st1 = client.executeMethod(po);

logger.info("執行狀態:" + st1);

String result = po.getResponseBodyAsString();//服務端返回的Response

po.releaseConnection();

return result;

}

第二種:帶多個引數的Post請求 (無需登陸)

public static String PostWithParas() {

HttpClient client = new HttpClient();

PostMethod postMethod = new PostMethod("http://127.0.0.1:8080/userrz");

NameValuePair param1 = new NameValuePair("id", "XXX");//引數1

NameValuePair param2 = new NameValuePair("time", "XXXXXX");//引數2

NameValuePair param3 = new NameValuePair("url", "XXXXXX");//引數3

NameValuePair param4 = new NameValuePair("msg", "XXX");引數4 postMethod.setRequestBody(new NameValuePair[]{param1, param2, param3, param4 });//設定引數

String result="";

try {

client.executeMethod(postMethod);//執行請求

result = postMethod.getResponseBodyAsString();//獲取返回的Response

} catch (IOException e) {

e.printStackTrace();

}

postMethod.releaseConnection();//釋放連結

}

第三種:帶Cookies請求認證,訪問網站內部某個頁面(需要登陸,使用者名稱密碼認證)

public static String GetLink(String Corpcode, String Code) throws Exception {

HttpClient client = new HttpClient();// 開啟新視窗

client.getHostConfiguration().setHost("localhost", 8080);// 配置

// 模擬手動登入頁面,login是處理登陸的action

PostMethod post = new PostMethod("/login");

NameValuePair username = new NameValuePair("username", "admin");//使用者名稱

NameValuePair pass = new NameValuePair("password", "admin123");//密碼

post.setRequestBody(new NameValuePair[] { username, pass });

int status = client.executeMethod(post);

System.out.println("執行狀態:" + status + ",返回狀態:" + post.getStatusLine(); post.releaseConnection();

// 檢視 cookie,並傳遞Cookies到伺服器認證

CookieSpec cookiespec = CookiePolicy.getDefaultSpec();

Cookie[] cookies = cookiespec.match("localhost", 8080, "/", false, client.getState().getCookies());

if (cookies.length == 0) {

System.out.println("沒有Cookies");

} else {

for (int i = 0; i < cookies.length; i++) {

System.out.println("Cookies:" + cookies[i].toString());

}

}

// 因為前面已經登陸了,也加入了Cookies,所以才可以直接訪問這個地址

GetMethod get = new GetMethod("/user");//這個才是需要訪問的真正action

int stats = client.executeMethod(get);

String result = get.getResponseBodyAsString();

System.out.println("Get請求:" + result);

get.releaseConnection();

return result;

}