日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

soap响应报文拼装_SOAP学习,构建实际的报文格式

發(fā)布時間:2025/3/21 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 soap响应报文拼装_SOAP学习,构建实际的报文格式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

因為需要做一個SOAP的接口對接,對方環(huán)境沒有弄好不能抓包,也只會調(diào)用不懂格式構(gòu)成,我們只想做個輕量級的接口,不需要支持SOAP的具體格式,只需要針對接口指定的具體參數(shù)名,解析字符串就可以了。

所以需要通過抓包確定一下soap的報文格式,方便做字符串解析和報文拼裝。

因此準(zhǔn)備構(gòu)建一個php的soap環(huán)境,進(jìn)行抓包。

當(dāng)前環(huán)境

centos6.3系統(tǒng),默認(rèn)php不支持soap,下載了php5.6版本

編譯

./configure ?'--with-libxml-dir=/usr/lib' '--with-zlib' '--with-gd' '--with-zlib-dir=/usr/local' '--with-mysql' '--enable-sockets' '--enable-mbstring' '--enable-soap' '--enable-safe-mode' '--enable-ftp' '--with-png-dir=/usr/local' '--with-freetype-dir=/usr/local' '--with-jpeg-dir=/usr/local' '--with-sqlite=shared'

發(fā)現(xiàn)找不到對應(yīng)的iconv庫,估計是在默認(rèn)路徑里面找不到。

所以重新編譯了iconv庫,設(shè)置./configure --prefix=/usr/local/libiconv

再編譯php加上一句話'--with-iconv=/usr/local/libiconv'

./configure ?'--with-libxml-dir=/usr/lib' '--with-zlib' '--with-gd' '--with-zlib-dir=/usr/local' '--with-mysql' '--enable-sockets' '--enable-mbstring' '--enable-soap' '--enable-safe-mode' '--enable-ftp' '--with-png-dir=/usr/local' '--with-freetype-dir=/usr/local' '--with-jpeg-dir=/usr/local' '--with-sqlite=shared' '--with-iconv=/usr/local/libiconv'

make

make install

php -m|grep soap

顯示安裝成功

很悲劇的發(fā)現(xiàn)apache的phpinfo里面使用php還是5.3.3版本,替換/usr/bin/php為新版本,重啟apache,但是無效,使用的還是舊版本的php。找了半天沒有找到解決辦法。

按照另外一種方法,將soap.so設(shè)置進(jìn)php.ini里面,但是發(fā)現(xiàn)php根本沒有編譯出這個庫,只有一個opcache.so。按照網(wǎng)上的方法,準(zhǔn)備編譯php安裝目錄下的ext/soap制作so,發(fā)現(xiàn)連configure都沒有,估計是舊版本的功能。本來想找一下5.3.3版本,但是官位已經(jīng)沒有這么舊的版本了。

網(wǎng)上檢查了一下php各版本的新增功能,發(fā)現(xiàn)當(dāng)前php支持內(nèi)置一個http服務(wù)器。

php -S localhost:3300 -t /path/to/root

可以啟動一個端口為3300的http服務(wù)了,總算不用去折騰該死的apache了。

按照網(wǎng)上的流程,構(gòu)建一個server和client。

首先放上Server.wsdl

紅色的返回結(jié)果,2個參數(shù),一個是result一個是錯誤原因,類型是wsdl:types,特別折騰,為了這個返回值弄了半天,對方是用java的,也說不明白。

青色是輸入?yún)?shù),5個獨立參數(shù),很簡單。

紫色是請求地址,客戶端拿到這個wsdl后,會向這個地址請求數(shù)據(jù)。

看看client2.php<?php

$soap?=?new?SoapClient("Service.wsdl");

$soap->TESTSOAP("1","2","3",0,"4");

?>

很簡單就兩句話,通過wsdl傳入5個參數(shù)。

再看Server.php

注意這個就是wsdl里面紫色框內(nèi)的url地址。<?php

class?Service?{

public?function?TESTSOAP($a,$b,$c,$d,$e){

return?0;

}

}

$server?=?new?SoapServer('Service.wsdl',?array('soap_version'?=>?SOAP_1_2));

$server->setClass("Service");?//注冊Service類的所有方法

$server->handle();?//處理請求

?>

同樣很簡單。

抓包,啟動php client2.php

查看抓包報文,格式很簡單,構(gòu)建字符串很容易,解析固定的參數(shù)也不難。

但是有個問題,就是返回值(0 ),返回值不能識別。估計返回個0看來是不行的。

這里在client里面打印了一下返回值的格式<?php

$soap?=?new?SoapClient("Service.wsdl");

$a1?=?$soap->TESTSOAP("1","2","3",0,"4");

echo?gettype($a1);

echo?"\n";

echo?var_dump($a1);

?>

發(fā)現(xiàn)是stdclass object,我就在function TESTSOAP做了如下修改$andy?=?array();

$andy?=?(object)$andy;

$andy->a?=?100;

$andy->b?=?"hahahaha";

return?$andy;

雖然是object了,但是還是不對,格式不正確,那么這個wsdl:types到底是個什么東西,后面實現(xiàn)了用map試試,總算是實驗成果了。$cardUID?=?array(

'Result'=>'100',

'ErrorDescription'=>'aaaaa'

);

return?$cardUID;

抓包如下

可以看見100和aaaaa。

如此,soap的實際格式也一覽無余了,只是簡單實現(xiàn)幾個接口,用字符串拼裝和解析就可以完成了。

總結(jié)

以上是生活随笔為你收集整理的soap响应报文拼装_SOAP学习,构建实际的报文格式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。