亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

HttpClient POST請(qǐng)求第三方接口問題(多參數(shù)傳參)

 更新時(shí)間:2023年07月15日 16:05:40   作者:郭優(yōu)秀的筆記  
這篇文章主要介紹了HttpClient POST請(qǐng)求第三方接口問題(多參數(shù)傳參),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

HttpClient POST請(qǐng)求第三方接口

HttpClient 是Apache Jakarta Common 下的子項(xiàng)目,可以用來(lái)提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。

在開發(fā)中經(jīng)常遇到和第三方公司接口對(duì)接,需要拿到對(duì)方提供的數(shù)據(jù)或者是給對(duì)方提供,下面給大家提供一個(gè)自己寫的demo,本地測(cè)試有效,利用post請(qǐng)求傳參訪問 ,希望可以幫到你

package test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson.JSONObject;
public class InterfaceRequest {
    public static void main(String[] args) {
        String url = "https://www.jianliyisheng.com/api/site/getprovincedata";
        HttpClient client = HttpClients.createDefault();
        //默認(rèn)post請(qǐng)求
        HttpPost post = new HttpPost(url);
        //拼接多參數(shù)
        JSONObject json = new JSONObject();
        json.put("uid", "79");
        json.put("key", "d86e33fb43036df9f9c29ff8085ac653");
        json.put("timestamp", "1562296283");
        json.put("typekey", "wshh");
        try {
            post.addHeader("Content-type", "application/json; charset=utf-8");
            post.setHeader("Accept", "application/json");
            post.setEntity(new StringEntity(json.toString(), Charset.forName("utf-8")));
            HttpResponse httpResponse = client.execute(post);
            HttpEntity entity = httpResponse.getEntity();
            System.err.println("狀態(tài):" + httpResponse.getStatusLine());
            System.err.println("參數(shù):" + EntityUtils.toString(entity));
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用httpclient請(qǐng)求第三方接口并攜帶cookie和參數(shù)

在實(shí)際開發(fā)中,經(jīng)常會(huì)碰到需要請(qǐng)求第三方接口的情況,這種接口往往都需要先獲取其身份驗(yàn)證標(biāo)識(shí),以此驗(yàn)證是否有權(quán)限訪問這個(gè)接口。

最近我遇到這種情況,需要先獲取到cookie,然后攜帶cookie及參數(shù)一起請(qǐng)求第三方接口,網(wǎng)絡(luò)上有許多方法,這里是根據(jù)我自己的實(shí)際需求編寫的代碼。

依賴

<dependency>
? ? ? <groupId>commons-httpclient</groupId>
? ? ? <artifactId>commons-httpclient</artifactId>
? ? ? <version>3.1</version>
</dependency>
<dependency>
? ? ?<groupId>org.apache.httpcomponents</groupId>
? ? ?<artifactId>httpmime</artifactId>
? ? ?<version>4.5.10</version>
</dependency>

獲取cookie

這里我的情況是每一個(gè)小時(shí)cookie就會(huì)失效,所有后端需要寫一個(gè)定時(shí)任務(wù)每50分鐘獲取一次cookie,

獲取cooike的方法:

public static String userLogin(String loginUrl, String name, String password) {
? ? ? ? ? ? HttpClient httpClient = new HttpClient(); ? ? ? ? ??
? ? ? ? ? ? PostMethod postMethod = new PostMethod(loginUrl); ? ? ? ? ? ?
? ? ? ? ? ? NameValuePair[] data = {new NameValuePair("username", name),
? ? ? ? ? ? ? ? ? ? new NameValuePair("password", password)};
? ? ? ? ? ? postMethod.setRequestBody(data);
? ? ? ? ? ? try { ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
? ? ? ? ? ? ? ? int statusCode = httpClient.executeMethod(postMethod);
? ? ? ? ? ? ? ? // 獲取 Cookie
? ? ? ? ? ? ? ? Cookie[] cookies = httpClient.getState().getCookies();
? ? ? ? ? ? ? ? String cookie = null;
? ? ? ? ? ? ? ? for (Cookie c : cookies) {
? ? ? ? ? ? ? ? ? ? //篩選想要的cookie
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return cookie;
? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? } ? ? ? ? ?
? ? ? ? ? ? return null;
? ? }

get請(qǐng)求攜帶cookie及參數(shù)

get請(qǐng)求比較簡(jiǎn)單易懂,參數(shù)數(shù)據(jù)可以直接添加在請(qǐng)求地址中

?? ?/**
? ? ?* get請(qǐng)求并攜帶cookie
? ? ?* @param url
? ? ?* @return
? ? ?*/
? ? public static String doGet(String url) {
? ? ? ? try {
? ? ? ? ?? ?//創(chuàng)建get請(qǐng)求
? ? ? ? ? ? HttpGet httpGet = new HttpGet(url);
? ? ? ? ? ? httpGet.addHeader(new BasicHeader("cookie", UserTask.cookie));
? ? ? ? ? ? httpGet.setHeader("Connection", "keep-alive"); ? ? ? ? ? ?
? ? ? ? ? ? HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
? ? ? ? ? ? CloseableHttpClient httpClient = httpClientBuilder.build();
? ? ? ? ? ? HttpResponse httpResponse = httpClient.execute(httpGet);
? ? ? ? ? ? // 響應(yīng)狀態(tài)
? ? ? ? ? ? if (httpResponse.getStatusLine().getStatusCode() == 200) {
? ? ? ? ? ? ? ? HttpEntity entity = httpResponse.getEntity();
? ? ? ? ? ? ? ? return EntityUtils.toString(entity, "UTF-8");
? ? ? ? ? ? }
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return “Error”;
? ? }

post請(qǐng)求攜帶cookie及參數(shù)

post請(qǐng)求相對(duì)復(fù)雜一點(diǎn),這里又分為兩種,一種為JSON數(shù)據(jù),一種為表單格式,獲取cookie使用的就是類似表單格式的處理,這里討論的是用的較多的JSON格式,就是第三方接口需要的參數(shù)格式為JSON。

??? ?/**
? ? ?* post請(qǐng)求并攜帶cookie
? ? ?* @param url
? ? ?* @param json
? ? ?* @return
? ? ?*/
? ? public static String doPostJson(String url, String json) {
? ? ? ? System.out.println(json);
? ? ? ? // 創(chuàng)建Httpclient對(duì)象?
? ? ? ? CloseableHttpClient httpClient = HttpClients.createDefault(); ? ? ? ?
? ? ? ? CloseableHttpResponse response = null; ? ? ??
? ? ? ? try {
? ? ? ? ? ? // 創(chuàng)建Post請(qǐng)求?
? ? ? ? ? ? HttpPost httpPost = new HttpPost(url);
? ? ? ? ? ? httpPost.addHeader(new BasicHeader("cookie", UserTask.cookie));
? ? ? ? ? ? httpPost.setHeader("Connection", "keep-alive"); ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
? ? ? ? ? ? httpPost.setEntity(entity); ? ? ? ??
? ? ? ? ? ? response = httpClient.execute(httpPost);
? ? ? ? ? ? if (response.getStatusLine().getStatusCode() == 200) {
? ? ? ? ? ? ? ? return EntityUtils.toString(response.getEntity(), "utf-8"); ? ? ? ? ? ? ??
? ? ? ? ? ? }
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? response.close();
? ? ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return "Error";
? ? }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java關(guān)于含有繼承類的成員初始化過程講解

    Java關(guān)于含有繼承類的成員初始化過程講解

    今天小編就為大家分享一篇Java關(guān)于含有繼承類的成員初始化過程講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • IDEA創(chuàng)建Java?Web項(xiàng)目的超詳細(xì)圖文教學(xué)

    IDEA創(chuàng)建Java?Web項(xiàng)目的超詳細(xì)圖文教學(xué)

    IDEA是程序員們常用的java集成開發(fā)環(huán)境,也是被公認(rèn)為最好用的java開發(fā)工具,下面這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Java?Web項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • IDEA整合Dubbo+Zookeeper+SpringBoot實(shí)現(xiàn)

    IDEA整合Dubbo+Zookeeper+SpringBoot實(shí)現(xiàn)

    初學(xué)者,想自己動(dòng)手做一個(gè)簡(jiǎn)單的demo,本文主要介紹了IDEA整合Dubbo+Zookeeper+SpringBoot實(shí)現(xiàn),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • GC調(diào)優(yōu)實(shí)戰(zhàn)之高分配速率High?Allocation?Rate

    GC調(diào)優(yōu)實(shí)戰(zhàn)之高分配速率High?Allocation?Rate

    這篇文章主要為大家介紹了GC調(diào)優(yōu)之高分配速率High?Allocation?Rate的實(shí)戰(zhàn)示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-01-01
  • Java基礎(chǔ)之集合框架詳解

    Java基礎(chǔ)之集合框架詳解

    這篇文章主要介紹了Java基礎(chǔ)之集合框架詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • idea創(chuàng)建springboot項(xiàng)目(版本只能選擇17和21)的解決方法

    idea創(chuàng)建springboot項(xiàng)目(版本只能選擇17和21)的解決方法

    idea2023創(chuàng)建spring boot項(xiàng)目時(shí),java版本無(wú)法選擇11,本文主要介紹了idea創(chuàng)建springboot項(xiàng)目(版本只能選擇17和21),下面就來(lái)介紹一下解決方法,感興趣的可以了解一下
    2024-01-01
  • Java解析xml的四種方法匯總

    Java解析xml的四種方法匯總

    XML在不同的語(yǔ)言里解析方式都是一樣的,只不過實(shí)現(xiàn)的語(yǔ)法不同而已。java中基本的解析方式有四種,DOM解析、sax解析、JDOM解析和DOM4J解析,下面我們就來(lái)詳細(xì)探討下這四種方式
    2016-05-05
  • Java中的跨域和@CrossOrigin注解的作用詳解

    Java中的跨域和@CrossOrigin注解的作用詳解

    這篇文章主要介紹了Java中的跨域和@CrossOrigin注解的作用詳解,跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)JavaScript施加的安全限制,需要的朋友可以參考下
    2023-12-12
  • Flink實(shí)現(xiàn)特定統(tǒng)計(jì)的歸約聚合reduce操作

    Flink實(shí)現(xiàn)特定統(tǒng)計(jì)的歸約聚合reduce操作

    這篇文章主要介紹了Flink實(shí)現(xiàn)特定統(tǒng)計(jì)的歸約聚合reduce操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • Java Socket實(shí)現(xiàn)猜數(shù)字小游戲

    Java Socket實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了Java Socket實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09

最新評(píng)論