Httpclient教程

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>

package com.kaishengit.httclient;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.IOException;
import java.io.InputStream;

/**
 * Created by wanggs on 2017/7/27.
 */
public class Httpclient {
    public static void main(String[] args) throws IOException {
        // 創(chuàng)建了一個可以發(fā)出請求的客戶端
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 創(chuàng)建一個Get請求
        HttpGet httpGet = new HttpGet("http://www.pingwest.com/feed/");
//   HttpPost httpPost = new HttpPost("http://www.pingwest.com/feed/"); POST請求
        // 發(fā)出請求,并接受服務(wù)端相應(yīng)
        HttpResponse response = httpClient.execute(httpGet);

        // 獲取Http狀態(tài)碼
        int statusCode = response.getStatusLine().getStatusCode();

        if (statusCode == 200) {
            // html 也就是獲取相應(yīng)輸入流
            InputStream inputStream = response.getEntity().getContent();

            String result = IOUtils.toString(inputStream, "UTF-8");
            inputStream.close();
            System.out.println(result);

        } else {
            System.out.println("服務(wù)器異常" + statusCode);
        }
        httpClient.close();
    }
}

工具類

package com.kaishengit.util;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class HttpUtil {

    public static String sendHttpGetRequestWithString(String url) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        try {
            HttpResponse response = httpClient.execute(httpGet);

            InputStream inputStream = null;
            if (response.getStatusLine().getStatusCode() == 200) {
                inputStream = response.getEntity().getContent();

                String result =  IOUtils.toString(inputStream,"UTF-8");
                httpClient.close();
                return result;
            } else {
                throw new RuntimeException("請求" + url + "異常 : " + response.getStatusLine().getStatusCode());
            }
        } catch (IOException ex) {
            throw new RuntimeException("請求" + url + "異常",ex);
        }
    }


}

目前,要為另一個項目提供接口荒给,接口是用HTTP URL實現(xiàn)的,最初的想法是另一個項目用jQuery post進行請求刁卜。
但是志电,很可能另一個項目是部署在別的機器上,那么就存在跨域問題蛔趴,而jquery的post請求是不允許跨域的挑辆。
這時,就只能夠用HttpClient包進行請求了,同時由于請求的URL是HTTPS的鱼蝉,為了避免需要證書洒嗤,所以用一個類繼承DefaultHttpClient類,忽略校驗過程魁亦。

1.寫一個SSLClient類渔隶,繼承至HttpClient

package com.wanggs.httpclient;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;

/**
 * Created by wanggs on 2017/7/28.
 * 用于進行Https請求的HttpClient
 */
public class SSLClient extends DefaultHttpClient {
    public SSLClient() throws Exception {
        super();
        SSLContext ctx = SSLContext.getInstance("TLS");
        X509TrustManager tm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
        ctx.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = this.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", 443, ssf));
    }
}

package com.wanggs.httpclient;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
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.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * Created by wanggs on 2017/7/28.
 */
public class HttpClientUtil {
    public String doPost(String url,Map<String,String> map,String charset){
        HttpClient httpClient = null;
        HttpPost httpPost = null;
        String result = null;
        try{
            httpClient = new SSLClient();
            httpPost = new HttpPost(url);
            //設(shè)置參數(shù)
            List<NameValuePair> list = new ArrayList<NameValuePair>();
            Iterator iterator = map.entrySet().iterator();
            while(iterator.hasNext()){
                Entry<String,String> elem = (Entry<String, String>) iterator.next();
                list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));
            }
            if(list.size() > 0){
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,charset);
                httpPost.setEntity(entity);
            }
            HttpResponse response = httpClient.execute(httpPost);
            if(response != null){
                HttpEntity resEntity = response.getEntity();
                if(resEntity != null){
                    result = EntityUtils.toString(resEntity,charset);
                }
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return result;
    }
}

測試
package com.wanggs.httpclient;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by wanggs on 2017/7/28.
 */
public class TestMain {
    private String url = "http://www.pingwest.com/feed/";
    private String charset = "utf-8";
    private HttpClientUtil httpClientUtil = null;

    public TestMain(){
        httpClientUtil = new HttpClientUtil();
    }

    public void test(){
        String httpOrgCreateTest = url + "httpOrg/create";
        Map<String,String> createMap = new HashMap<String,String>();
        createMap.put("authuser","*****");
        createMap.put("authpass","*****");
        createMap.put("orgkey","****");
        createMap.put("orgname","****");
        String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTest,createMap,charset);
        System.out.println("result:"+httpOrgCreateTestRtn);
    }

    public static void main(String[] args){
        TestMain main = new TestMain();
        main.test();
    }
}

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吉挣,隨后出現(xiàn)的幾起案子派撕,更是在濱河造成了極大的恐慌,老刑警劉巖睬魂,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件终吼,死亡現(xiàn)場離奇詭異,居然都是意外死亡氯哮,警方通過查閱死者的電腦和手機际跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉钢,“玉大人姆打,你說我怎么就攤上這事〕λ洌” “怎么了幔戏?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長税课。 經(jīng)常有香客問我闲延,道長,這世上最難降的妖魔是什么韩玩? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任垒玲,我火速辦了婚禮,結(jié)果婚禮上找颓,老公的妹妹穿的比我還像新娘合愈。我一直安慰自己,他們只是感情好击狮,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布佛析。 她就那樣靜靜地躺著,像睡著了一般彪蓬。 火紅的嫁衣襯著肌膚如雪说莫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天寞焙,我揣著相機與錄音,去河邊找鬼。 笑死捣郊,一個胖子當(dāng)著我的面吹牛辽狈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呛牲,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼刮萌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娘扩?” 一聲冷哼從身側(cè)響起着茸,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琐旁,沒想到半個月后涮阔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡灰殴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年敬特,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺陶。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡伟阔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掰伸,到底是詐尸還是另有隱情皱炉,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布狮鸭,位于F島的核電站合搅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怕篷。R本人自食惡果不足惜历筝,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廊谓。 院中可真熱鬧梳猪,春花似錦、人聲如沸蒸痹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叠荠。三九已至匿沛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榛鼎,已是汗流浹背逃呼。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工鳖孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抡笼。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓苏揣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親推姻。 傳聞我的和親對象是個殘疾皇子平匈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)藏古,斷路器增炭,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • 1.幾種基本數(shù)據(jù)類型?復(fù)雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined、Nul...
    極樂君閱讀 5,527評論 0 106
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    程序員poetry閱讀 114,426評論 24 450
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法拧晕,類相關(guān)的語法隙姿,內(nèi)部類的語法,繼承相關(guān)的語法防症,異常的語法孟辑,線程的語...
    子非魚_t_閱讀 31,665評論 18 399
  • 最近的天涼颼颼的饲嗽,天氣預(yù)報說近一兩個星期都有雨,這剛說著奈嘿,雨點砸在屋頂?shù)穆曇魝鱽砻蚕海胂笾袘?yīng)該是萬籟俱寂,雨淅瀝瀝的...
    名字好煩惱閱讀 151評論 0 0