優(yōu)化網(wǎng)站排名方法教程怎樣自己做網(wǎng)站
1HttpClient簡介
在JDK中java.net包下提供了用戶HTTP訪問的基本功能,但是它缺少靈活性或許多應(yīng)用所需要的功能。
HttpClient起初是Apache Jakarta Common?的子項目。用來提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端編程工具包,并且它支持 HTTP 協(xié)議最新的版本。2007年成為頂級項目。
通俗解釋:HttpClient可以實現(xiàn)使用Java代碼完成標(biāo)準HTTP請求及響應(yīng)。
2 新建服務(wù)端項目
新建項目httpclient_rpc_server
2.1 修改maven配置文件
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.2.RELEASE</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
2.2?新建控制器
package com.example.httpclientserver.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class TestController {/** 帶參數(shù)的get請求*/@RequestMapping(value="/params", produces = {"application/json;charset=UTF-8"})@ResponseBodypublic String params(String name, String password){System.out.println("name - " + name + " ; password - " + password);return "{\"msg\":\"登錄成功\", \"user\":{\"name\":\""+name+"\",\"password\":\""+password+"\"}}";}/** 不帶參數(shù)的get請求*/@RequestMapping(value="/test",produces = {"application/json;charset=UTF-8"})@ResponseBodypublic String test(){return "{\"msg\":\"處理返回\"}";}
}
2.3?新建啟動器
package com.example.httpclientserver;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ServerApp {public static void main(String[] args) {SpringApplication.run(ServerApp.class, args);}
}
2.4 application.yml修改端口(非必需操作)
server:port: 80
2.5 測試
3 新建客戶端項目
新建客戶端項目httpclient_rpc_client
3.1 添加maven依賴
<dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.12</version></dependency></dependencies>
3.2 新建主類進行httpclient訪問
package com.example.httpclient;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;public class TestHttpClient {public static void main(String[] args) throws Exception {//訪問無參數(shù)GET請求testGetNoParams();//訪問有參數(shù)GET請求testGetNoParams();}/*** 有參數(shù)GET請求* @throws IOException*/public static void testGetParams() throws IOException, URISyntaxException {HttpClient client = HttpClients.createDefault();// 基于Builder構(gòu)建請求地址URIBuilder builder = new URIBuilder("http://localhost:80/params");// 基于單參數(shù)傳遞,構(gòu)建請求地址
// builder.addParameter("name", "bjsxt");
// builder.addParameter("password", "admin123");
// URI uri = builder.build();// 基于多參數(shù)傳遞,構(gòu)建請求地址List<NameValuePair> nvps = new ArrayList<NameValuePair>();nvps.add(new BasicNameValuePair("name","bjsxt"));nvps.add(new BasicNameValuePair("password", "admin123"));builder.addParameters(nvps);URI uri = builder.build();System.out.println(uri.toASCIIString());String result = EntityUtils.toString(client.execute(new HttpGet(uri)).getEntity());System.out.println(result);}/*** 無參數(shù)GET請求* 使用瀏覽器,訪問網(wǎng)站的過程是:* 1、 打開瀏覽器* 2、 輸入地址* 3、 訪問* 4、 看結(jié)果* 使用HttpClient,訪問WEB服務(wù)的過程:* 1、 創(chuàng)建客戶端,相當(dāng)于打開瀏覽器* 2、 創(chuàng)建請求地址, 相當(dāng)于輸入地址* 3、 發(fā)起請求, 相當(dāng)于訪問網(wǎng)站(回車鍵)* 4、 處理響應(yīng)結(jié)果, 相當(dāng)于瀏覽器顯示結(jié)果*/public static void testGetNoParams() throws IOException {// 創(chuàng)建客戶端對象HttpClient client = HttpClients.createDefault();// 創(chuàng)建請求地址HttpGet get = new HttpGet("http://localhost:80/test");// 發(fā)起請求,接收響應(yīng)對象HttpResponse response = client.execute(get);// 獲取響應(yīng)體。 響應(yīng)數(shù)據(jù)是一個基于HTTP協(xié)議標(biāo)準字符串封裝的對象。// 所以,響應(yīng)體和響應(yīng)頭,都是封裝的HTTP協(xié)議數(shù)據(jù)。直接使用可能有亂碼或解析錯誤HttpEntity entity = response.getEntity();// 通過HTTP實體工具類,轉(zhuǎn)換響應(yīng)體數(shù)據(jù)。 使用的字符集是UTF-8String responseString = EntityUtils.toString(entity, "UTF-8");System.out.println("服務(wù)器響應(yīng)數(shù)據(jù)是 - [ " + responseString + " ]");// 回收資源client = null;}
}
其中有參請求方式有兩種,一種是基于單參數(shù)傳遞,構(gòu)建請求地址,如下:
// 基于單參數(shù)傳遞,構(gòu)建請求地址builder.addParameter("name", "bjsxt");builder.addParameter("password", "admin123");URI uri = builder.build();
一種是基于多參數(shù)傳遞,構(gòu)建請求地址,如下:
// 基于多參數(shù)傳遞,構(gòu)建請求地址List<NameValuePair> nvps = new ArrayList<NameValuePair>();nvps.add(new BasicNameValuePair("name","bjsxt"));nvps.add(new BasicNameValuePair("password", "admin123"));builder.addParameters(nvps);URI uri = builder.build();
4 測試
啟動httpclient_rpc_server和httpclient_rpc_client,httpclient_rpc_client控制臺輸出如下:
GET請求成功。