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;
}