91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何調用第三方接口

發布時間:2022-06-15 13:52:33 來源:億速云 閱讀:340 作者:iii 欄目:開發技術

這篇“Java如何調用第三方接口”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java如何調用第三方接口”文章吧。

    一、 通過JDK網絡類Java.net.HttpURLConnection

    1.java.net包下的原生java api提供的http請求

    使用步驟:

    1、通過統一資源定位器(java.net.URL)獲取連接器(java.net.URLConnection)。

    2、設置請求的參數。

    3、發送請求。

    4、以輸入流的形式獲取返回內容。

    5、關閉輸入流。

    2.HttpClientUtil工具類

    /**
     * jdk 調用第三方接口
     * @author hsq
     */
    public class HttpClientUtil2 {
    
    
        /**
         * 以post方式調用對方接口方法
         * @param pathUrl
         */
        public static String doPost(String pathUrl, String data){
            OutputStreamWriter out = null;
            BufferedReader br = null;
            String result = "";
            try {
                URL url = new URL(pathUrl);
    
                //打開和url之間的連接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
                //設定請求的方法為"POST",默認是GET
                //post與get的不同之處在于post的參數不是放在URL字串里面,而是放在http請求的正文內。
                conn.setRequestMethod("POST");
    
                //設置30秒連接超時
                conn.setConnectTimeout(30000);
                //設置30秒讀取超時
                conn.setReadTimeout(30000);
    
                // 設置是否向httpUrlConnection輸出,因為這個是post請求,參數要放在http正文內,因此需要設為true, 默認情況下是false;
                conn.setDoOutput(true);
                // 設置是否從httpUrlConnection讀入,默認情況下是true;
                conn.setDoInput(true);
    
                // Post請求不能使用緩存
                conn.setUseCaches(false);
    
                //設置通用的請求屬性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");  //維持長鏈接
                conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
    
                //連接,從上述url.openConnection()至此的配置必須要在connect之前完成,
                conn.connect();
    
                /**
                 * 下面的三句代碼,就是調用第三方http接口
                 */
                //獲取URLConnection對象對應的輸出流
                //此處getOutputStream會隱含的進行connect(即:如同調用上面的connect()方法,所以在開發中不調用上述的connect()也可以)。
                out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
                //發送請求參數即數據
                out.write(data);
                //flush輸出流的緩沖
                out.flush();
    
                /**
                 * 下面的代碼相當于,獲取調用第三方http接口后返回的結果
                 */
                //獲取URLConnection對象對應的輸入流
                InputStream is = conn.getInputStream();
                //構造一個字符流緩存
                br = new BufferedReader(new InputStreamReader(is));
                String str = "";
                while ((str = br.readLine()) != null){
                    result += str;
                }
                System.out.println(result);
                //關閉流
                is.close();
                //斷開連接,disconnect是在底層tcp socket鏈接空閑時才切斷,如果正在被其他線程使用就不切斷。
                conn.disconnect();
    
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    if (out != null){
                        out.close();
                    }
                    if (br != null){
                        br.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
    
        /**
         * 以get方式調用對方接口方法
         * @param pathUrl
         */
        public static String doGet(String pathUrl){
            BufferedReader br = null;
            String result = "";
            try {
                URL url = new URL(pathUrl);
    
                //打開和url之間的連接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
                //設定請求的方法為"GET",默認是GET
                //post與get的不同之處在于post的參數不是放在URL字串里面,而是放在http請求的正文內。
                conn.setRequestMethod("GET");
    
                //設置30秒連接超時
                conn.setConnectTimeout(30000);
                //設置30秒讀取超時
                conn.setReadTimeout(30000);
    
                // 設置是否向httpUrlConnection輸出,因為這個是post請求,參數要放在http正文內,因此需要設為true, 默認情況下是false;
                conn.setDoOutput(true);
                // 設置是否從httpUrlConnection讀入,默認情況下是true;
                conn.setDoInput(true);
    
                // Post請求不能使用緩存(get可以不使用)
                conn.setUseCaches(false);
    
                //設置通用的請求屬性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");  //維持長鏈接
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
    
                //連接,從上述url.openConnection()至此的配置必須要在connect之前完成,
                conn.connect();
    
                /**
                 * 下面的代碼相當于,獲取調用第三方http接口后返回的結果
                 */
                //獲取URLConnection對象對應的輸入流
                InputStream is = conn.getInputStream();
                //構造一個字符流緩存
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                String str = "";
                while ((str = br.readLine()) != null){
                    result += str;
                }
                System.out.println(result);
                //關閉流
                is.close();
                //斷開連接,disconnect是在底層tcp socket鏈接空閑時才切斷,如果正在被其他線程使用就不切斷。
                conn.disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    if (br != null){
                        br.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
    }

    3.第三方api接口

    /**
     * @author hsq
     */
    @RestController
    @RequestMapping("/api")
    public class HelloWorld {
    
        private static final Logger log= LoggerFactory.getLogger(HelloWorld.class);
    
        @GetMapping ("/getHello")
        public Result getHelloWord(){
            log.info("進入到api接口.......");
            return Result.success("hello world api get 接口數據");
        }
    
        @PostMapping("/postHello")
        public Result postHelloWord(@RequestBody User user){
            log.info("進入post 方法.....");
            System.out.println(user.toString());
            return Result.success("hello world api post接口數據");
        }
    }

    Java如何調用第三方接口

    4.測試類

     @Test
        public void testJDKApi(){
            //測試get方法
            String s = HttpClientUtil2.doGet("http://localhost:9092/api/getHello");
            System.out.println("get方法:"+s);
            //測試post方法
            User user = new User();
            user.setUname("胡蘿卜");
            user.setRole("普通用戶");
            //把對象轉換為json格式
            String s1 = JsonUtil.toJson(user);
            String postString = HttpClientUtil2.doPost("http://localhost:9092/api/postHello",s1);
            System.out.println("post方法:"+postString);
        }

    結果:

    Java如何調用第三方接口

    二、通過Apache common封裝好的HttpClient

    1.引入依賴

     		<!--HttpClient-->
            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
            </dependency>
            <!--json-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.28</version>
            </dependency>

    2.httpClientUtil

    /**
    	*httpClient的get請求方式
         * 使用GetMethod來訪問一個URL對應的網頁實現步驟:
         * 1.生成一個HttpClient對象并設置相應的參數;
         * 2.生成一個GetMethod對象并設置響應的參數;
         * 3.用HttpClient生成的對象來執行GetMethod生成的Get方法;
         * 4.處理響應狀態碼;
         * 5.若響應正常,處理HTTP響應內容;
         * 6.釋放連接。
     * @author hsq
     */
    public class HttpClientUtil {
    
        /**
         * @param url
         * @param charset
         * @return
         */
        public static String doGet(String url, String charset){
            /**
             * 1.生成HttpClient對象并設置參數
             */
            HttpClient httpClient = new HttpClient();
            //設置Http連接超時為5秒
            httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
    
            /**
             * 2.生成GetMethod對象并設置參數
             */
            GetMethod getMethod = new GetMethod(url);
            //設置get請求超時為5秒
            getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
            //設置請求重試處理,用的是默認的重試處理:請求三次
            getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
    
            String response = "";
    
            /**
             * 3.執行HTTP GET 請求
             */
            try {
                int statusCode = httpClient.executeMethod(getMethod);
    
                /**
                 * 4.判斷訪問的狀態碼
                 */
                if (statusCode != HttpStatus.SC_OK){
                    System.err.println("請求出錯:" + getMethod.getStatusLine());
                }
    
                /**
                 * 5.處理HTTP響應內容
                 */
                //HTTP響應頭部信息,這里簡單打印
                Header[] headers = getMethod.getResponseHeaders();
                for (Header h: headers){
                    System.out.println(h.getName() + "---------------" + h.getValue());
                }
                //讀取HTTP響應內容,這里簡單打印網頁內容
                //讀取為字節數組
                byte[] responseBody = getMethod.getResponseBody();
                response = new String(responseBody, charset);
                System.out.println("-----------response:" + response);
                //讀取為InputStream,在網頁內容數據量大時候推薦使用
                //InputStream response = getMethod.getResponseBodyAsStream();
    
            } catch (HttpException e) {
                //發生致命的異常,可能是協議不對或者返回的內容有問題
                System.out.println("請檢查輸入的URL!");
                e.printStackTrace();
            } catch (IOException e){
                //發生網絡異常
                System.out.println("發生網絡異常!");
            }finally {
                /**
                 * 6.釋放連接
                 */
                getMethod.releaseConnection();
            }
            return response;
        }
    
        /**
         * post請求
         * @param url
         * @param json
         * @return
         */
        public static String doPost(String url, JSONObject json){
            HttpClient httpClient = new HttpClient();
            PostMethod postMethod = new PostMethod(url);
    
            postMethod.addRequestHeader("accept", "*/*");
            postMethod.addRequestHeader("connection", "Keep-Alive");
            //設置json格式傳送
            postMethod.addRequestHeader("Content-Type", "application/json;charset=utf-8");
            //必須設置下面這個Header
            postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
            //添加請求參數
            //postMethod.addParameter("param", json.getString("param"));
            StringRequestEntity param = new StringRequestEntity(json.getString("param"));
            postMethod.setRequestEntity(param);
            String res = "";
            try {
                int code = httpClient.executeMethod(postMethod);
                if (code == 200){
                    byte[] responseBody = postMethod.getResponseBody();
                    res = new String(responseBody, "UTF-8");
                    //res = postMethod.getResponseBodyAsString();
                    System.out.println(res);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return res;
        }
    }

    3.第三方api接口

    @RestController
    @RequestMapping("/api")
    public class HelloWorld {
    
        private static final Logger log= LoggerFactory.getLogger(HelloWorld.class);
    
    
        @GetMapping ("/getHello")
        public Result getHelloWord(){
            log.info("進入到api接口.......");
            return Result.success("hello world api get 接口數據");
        }
    
        @PostMapping("/postHello")
        public Result postHelloWord(@RequestBody User user){
            log.info("進入post 方法.....");
            System.out.println(user.toString());
            return Result.success("hello world api post接口數據");
        }
    
    }

    4.測試類

     	@Test
        public void testApi() {
            //測試get方法
            String s = HttpClientUtil.doGet("http://localhost:9092/api/getHello", "UTF-8");
            System.out.println("get方法:"+s);
            //測試post方法
            User user = new User();
            user.setUname("胡蘿卜");
            user.setRole("普通用戶");
            JSONObject jsonObject = new JSONObject();
            String s1 = JsonUtil.toJson(user);
            jsonObject.put("param",s1);
            String postString = HttpClientUtil.doPost("http://localhost:9092/api/postHello", jsonObject);
            System.out.println("post方法:"+postString);
        }

    結果:

    Java如何調用第三方接口

    三、通過Spring的RestTemplate

    1.引入依賴

    導入springboot的web包

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
        </parent>
     
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>

    2.RestTemplate配置類

    /**
     * @author hsq
     */
    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        public RestTemplate restTemplate(ClientHttpRequestFactory factory){
            return new RestTemplate(factory);
        }
    
        @Bean
        public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setConnectTimeout(15000);
            factory.setReadTimeout(5000);
            return factory;
        }
    }

    3.RestTemplate實現類

    /**
     * @author hsq
     */
    @Component
    public class RestTemplateToInterface {
    
        @Autowired
        private RestTemplate restTemplate;
    
        /**
         * 以get方式請求第三方http接口 getForEntity
         * @param url
         * @return
         */
        public Result doGetWith2(String url){
            ResponseEntity<Result> responseEntity = restTemplate.getForEntity(url, Result.class);
            Result result = responseEntity.getBody();
            return result;
        }
    
        /**
         * 以get方式請求第三方http接口 getForObject
         * 返回值返回的是響應體,省去了我們再去getBody()
         * @param url
         * @return
         */
        public Result doGetWith3(String url){
            Result result  = restTemplate.getForObject(url, Result.class);
            return result;
        }
    
        /**
         * 以post方式請求第三方http接口 postForEntity
         * @param url
         * @param user
         * @return
         */
        public String doPostWith2(String url,User user){
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, user, String.class);
            String body = responseEntity.getBody();
            return body;
        }
    
        /**
         * 以post方式請求第三方http接口 postForEntity
         * 返回值返回的是響應體,省去了我們再去getBody()
         * @param url
         * @param user
         * @return
         */
        public String doPostWith3(String url,User user){
            String body = restTemplate.postForObject(url, user, String.class);
            return body;
        }
    
        /**
         * exchange
         * @return
         */
        public String doExchange(String url, Integer age, String name){
            //header參數
            HttpHeaders headers = new HttpHeaders();
            String token = "asdfaf2322";
            headers.add("authorization", token);
            headers.setContentType(MediaType.APPLICATION_JSON);
    
            //放入body中的json參數
            JSONObject obj = new JSONObject();
            obj.put("age", age);
            obj.put("name", name);
    
            //組裝
            HttpEntity<JSONObject> request = new HttpEntity<>(obj, headers);
            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
            String body = responseEntity.getBody();
            return body;
        }
    }

    4.第三方api接口

    /**
     * @author hsq
     */
    @RestController
    @RequestMapping("/api")
    public class HelloWorld {
    
        private static final Logger log= LoggerFactory.getLogger(HelloWorld.class);
    
        @GetMapping ("/getHello")
        public Result getHelloWord(){
            log.info("進入到api接口.......");
            return Result.success("hello world api get 接口數據");
        }
    
        @PostMapping("/postHello")
        public Result postHelloWord(@RequestBody User user){
            log.info("進入post 方法.....");
            System.out.println(user.toString());
            return Result.success("hello world api post接口數據");
        }
    }

    Java如何調用第三方接口

    5.測試類

    //注入使用
    @Autowired
    private RestTemplateToInterface restTemplateToInterface;
    
    @Test
    public void testSpringBootApi(){
        Result result= restTemplateToInterface.doGetWith2("http://localhost:9092/api/getHello");
        System.out.println("get結果:"+result);
        User user = new User();
        user.setUname("胡蘿卜");
        user.setRole("普通用戶");
        String s = restTemplateToInterface.doPostWith2("http://localhost:9092/api/postHello", user);
        System.out.println("post結果:"+s);
    }

    結果:

    Java如何調用第三方接口

    以上就是關于“Java如何調用第三方接口”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    蓝山县| 韶山市| 兴国县| 益阳市| 深水埗区| 棋牌| 平南县| 乐陵市| 武穴市| 抚松县| 南木林县| 公安县| 奇台县| 黄梅县| 永昌县| 平昌县| 积石山| 曲水县| 长海县| 绍兴县| 沈丘县| 县级市| 渭源县| 克拉玛依市| 伊宁市| 同仁县| 福泉市| 望谟县| 新野县| 安徽省| 偏关县| 阿勒泰市| 城口县| 固镇县| 平山县| 越西县| 昌图县| 罗定市| 石家庄市| 肇庆市| 察隅县|