2020-05-12 三種調(diào)用webservice的方式

本文以 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
為例,這是一個公共的查詢手機(jī)號碼歸屬地的webservice接口 有興趣也可以自己發(fā)布一個webservice接口玩玩


  1. 正常soap(完整xml報(bào)文)方式調(diào)用 顧名思義就是通過正常的xml報(bào)文調(diào)用接口
  • 必須設(shè)置connection.setRequestProperty("content-type", "text/xml;charset=utf-8") 字符集看具體
  • connection.setDoInput(true)蓖乘, connection.setDoOutput(true)必須設(shè)置
  • connection.setRequestMethod似乎可以不設(shè)置
  • 構(gòu)建xml報(bào)文的外部格式基本都一樣,xmlns:web即為wsdl的頭部的namespace
public static void main(String[] args) throws IOException {
        //第一步:創(chuàng)建服務(wù)地址
        URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
        //第二步:打開一個通向服務(wù)地址的連接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //第三步:設(shè)置參數(shù)
        //3.1發(fā)送方式設(shè)置:POST必須大寫
        connection.setRequestMethod("POST");
        //3.2設(shè)置數(shù)據(jù)格式:content-type
        connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
        //3.3設(shè)置輸入輸出桂肌,因?yàn)槟J(rèn)新創(chuàng)建的connection沒有讀寫權(quán)限剪决,
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //第四步:組織SOAP數(shù)據(jù),發(fā)送請求
        String soapXML = getXML("18373133976");
        //將信息以流的方式發(fā)送出去
        OutputStream os = connection.getOutputStream();
        os.write(soapXML.getBytes());
        //第五步:接收服務(wù)端響應(yīng)胯舷,打印
        int responseCode = connection.getResponseCode();
        if (200 == responseCode) {//表示服務(wù)端響應(yīng)成功
            //獲取當(dāng)前連接請求返回的數(shù)據(jù)流
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            StringBuilder sb = new StringBuilder();
            String temp = null;
            while (null != (temp = br.readLine())) {
                sb.append(temp);
            }
            /**
             * 打印結(jié)果
             */
            System.out.println(sb.toString());
            is.close();
            isr.close();
            br.close();
        }
        //記得關(guān)閉連接
        os.close();
    }


    public static String getXML(String phone) {

        String soapXML = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://WebXml.com.cn/\">\n" +
                "   <soapenv:Header/>\n" +
                "   <soapenv:Body>\n" +
                "      <web:getMobileCodeInfo>\n" +
                "         <!--Optional:-->\n" +
                "         <web:mobileCode>" + phone + "</web:mobileCode>\n" +
                "         <!--Optional:-->\n" +
                "         <web:userID></web:userID>\n" +
                "      </web:getMobileCodeInfo>\n" +
                "   </soapenv:Body>\n" +
                "</soapenv:Envelope>";
        return soapXML;
    }
  • 返回
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
      <getMobileCodeInfoResult>18373133976:湖南 長沙 湖南移動全球通卡</getMobileCodeInfoResult>
    </getMobileCodeInfoResponse>
  </soap:Body>
</soap:Envelope>




  1. 正常http-GET方式調(diào)用接口
  • connection.setDoInput(true)完慧, connection.setDoOutput(true)有時候需要設(shè)置
  • 如果參數(shù)有json數(shù)據(jù),例如包含雙引號這些剩失,需要先把參數(shù)encode屈尼,然后拼在url后面 例如
String xx = URLEncoder.encode("{\"data\": {\"appointmentBeginDate\": \"2019-01-01\",\"appointmentEndDate\": \"2019-02-01 23:59:59\",\"cutoverType\": [1, 3],\"affectedNetwork\": [1, 2]}}", "UTF-8");
URL url = new URL("http://127.0.0.1:3389/ws/cutover.asmx/Query?requestJson="+xx);
public static void main(String[] args) throws IOException {
        //第一步:創(chuàng)建服務(wù)地址
        URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=13643086903&userID=");
        //第二步:打開一個通向服務(wù)地址的連接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //第三步:接收服務(wù)端響應(yīng),打印
        int responseCode = connection.getResponseCode();
        if (200 == responseCode) {//表示服務(wù)端響應(yīng)成功
            //獲取當(dāng)前連接請求返回的數(shù)據(jù)流
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            StringBuilder sb = new StringBuilder();
            String temp = null;
            while (null != (temp = br.readLine())) {
                sb.append(temp);
            }
            /**
             * 打印結(jié)果
             */
            System.out.println(sb.toString());
            is.close();
            isr.close();
            br.close();
        }
    }
  • 返回
<?xml version="1.0" encoding="utf-8"?><string xmlns="http://WebXml.com.cn/">13643086903:廣東 梅州 廣東移動神州行卡</string>




  1. 正常http-POST方式調(diào)用接口
  • 只需要設(shè)置輸入輸出
  • 如果參數(shù)有json數(shù)據(jù)拴孤,好像也要轉(zhuǎn)義脾歧,可以自己去試試,這個接口沒有json等特殊數(shù)據(jù)
public static void main(String[] args) throws IOException {
        //第一步:創(chuàng)建服務(wù)地址
        URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");
        //第二步:打開一個通向服務(wù)地址的連接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //3.3設(shè)置輸入輸出演熟,因?yàn)槟J(rèn)新創(chuàng)建的connection沒有讀寫權(quán)限鞭执,
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //第四步:組織SOAP數(shù)據(jù),發(fā)送請求
        String soapXML = getXML("18373133976");
        //將信息以流的方式發(fā)送出去
        OutputStream os = connection.getOutputStream();
        os.write(soapXML.getBytes());
        //第五步:接收服務(wù)端響應(yīng)芒粹,打印
        int responseCode = connection.getResponseCode();
        if (200 == responseCode) {//表示服務(wù)端響應(yīng)成功
            //獲取當(dāng)前連接請求返回的數(shù)據(jù)流
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);

            StringBuilder sb = new StringBuilder();
            String temp = null;
            while (null != (temp = br.readLine())) {
                sb.append(temp);
            }
            /**
             * 打印結(jié)果
             */
            System.out.println(sb.toString());
            is.close();
            isr.close();
            br.close();
        }
        os.close();
    }
    public static String getXML(String phone) {
        return "mobileCode=18373133976&userID=";
    }
  • 返回
<?xml version="1.0" encoding="utf-8"?><string xmlns="http://WebXml.com.cn/">18373133976:湖南 長沙 湖南移動全球通卡</string>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兄纺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子化漆,更是在濱河造成了極大的恐慌估脆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件座云,死亡現(xiàn)場離奇詭異疙赠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)朦拖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門圃阳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人璧帝,你說我怎么就攤上這事捍岳。” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵祟同,是天一觀的道長作喘。 經(jīng)常有香客問我,道長晕城,這世上最難降的妖魔是什么泞坦? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮砖顷,結(jié)果婚禮上贰锁,老公的妹妹穿的比我還像新娘。我一直安慰自己滤蝠,他們只是感情好豌熄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著物咳,像睡著了一般锣险。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上览闰,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天芯肤,我揣著相機(jī)與錄音,去河邊找鬼压鉴。 笑死崖咨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的油吭。 我是一名探鬼主播击蹲,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婉宰!你這毒婦竟也來了歌豺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芍阎,失蹤者是張志新(化名)和其女友劉穎世曾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谴咸,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轮听,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岭佳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片血巍。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖珊随,靈堂內(nèi)的尸體忽然破棺而出述寡,到底是詐尸還是另有隱情柿隙,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布鲫凶,位于F島的核電站禀崖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏螟炫。R本人自食惡果不足惜波附,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昼钻。 院中可真熱鬧掸屡,春花似錦、人聲如沸然评。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碗淌。三九已至盏求,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亿眠,已是汗流浹背风喇。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缕探,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓还蹲,卻偏偏與公主長得像爹耗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谜喊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355