亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP調用Webservice經典實例

2024-05-04 21:48:09
字體:
來源:轉載
供稿:網友

NuSoap是PHP環境下的WebService編程工具,用于創建或調用WebService,它是一個開源軟件,是完全采用PHP語言編寫的、通過HTTP收發SOAP消息的一系列PHP類,由NuSphere Corporation開發,NuSOAP的一個優勢是不需要擴展庫的支持,這種特性使得NuSoap可以用于所有的PHP環境,不受服務器安全設置的影響.

方法一,直接調用,代碼如下:

  1. <?php 
  2. include(‘NuSoap.php’); 
  3. // 創建一個soapclient對象,參數是server的WSDL 
  4. $client = new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL’, ‘wsdl’); 
  5.  
  6. // 參數轉為數組形式傳遞 
  7. $aryPara = array(‘strUsername’=>’username’, ‘strPassword’=>MD5(‘password’)); 
  8.  
  9. // 調用遠程函數 
  10. $aryResult = $client->call(‘login’,$aryPara); 
  11.  
  12. //echo $client->debug_str; 
  13.  
  14.  
  15. $document=$client->document; 
  16. echo <<<SoapDocument 
  17. <?xml version=”1.0″ encoding=”GB2312″?> 
  18. <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:si=”http://soapinterop.org/xsd“> 
  19. <SOAP-ENV:Body> 
  20. $document 
  21. </SOAP-ENV:Body> 
  22. </SOAP-ENV:Envelope> 
  23. SoapDocument; 
  24. ?> 

方法二,代理方式調用,代碼如下:

  1. <?php 
  2. require(‘NuSoap.php’); 
  3.  
  4. //創建一個soapclient對象,參數是server的WSDL 
  5. $client=new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL’, ‘wsdl’); 
  6.  
  7. //生成proxy類 
  8. $proxy=$client->getProxy(); 
  9.  
  10. //調用遠程函數 
  11. $aryResult=$proxy->login(‘username’,MD5(‘password’)); 
  12.  
  13. //echo $client->debug_str; 
  14.  
  15.  
  16. $document=$proxy->document; 
  17. echo <<<SoapDocument 
  18. <?xml version=”1.0″ encoding=”GB2312″?> 
  19. <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:si=”http://soapinterop.org/xsd“> 
  20. <SOAP-ENV:Body> 
  21. $document 
  22. </SOAP-ENV:Body> 
  23. </SOAP-ENV:Envelope> 
  24. SoapDocument; 
  25. ?> 

許多使用NuSoap 調用.NET WebService或J2EE WebService的朋友可能都遇到過中文亂碼問題,下面介紹這一問題的出現的原因和相應的解決方法.

NuSoap調用WebService出現亂碼的原因:

通常我們進行WebService開發時都是用的UTF-8編碼,這時我們需要設置:

$client->soap_defencoding = ‘utf-8′;

同時,需要讓xml以同樣的編碼方式傳遞:

$client->xml_encoding = ‘utf-8′;

至此應該是一切正常了才對,但是我們在輸出結果的時候,卻發現返回的是亂碼.

NuSoap調用WebService出現亂碼的解決方法:

實際上,開啟了調試功能的朋友,相信會發現$client->response返回的是正確的結果,為什么$result = $client->call($action, array(‘parameters’ => $param)); 卻是亂碼呢?

研究過NuSoap代碼后我們會發現,當xml_encoding設置為UTF-8時,NuSoap會檢測decode_utf8的設置,如果為true,會執行 PHP 里面的utf8_decode函數,而NuSoap默認為true,因此,我們需要設置:

  1. $client->soap_defencoding = ‘utf-8′; 
  2. $client->decode_utf8 = false; 
  3. $client->xml_encoding = ‘utf-8′; 

補充介紹:

NuSOAP 是 PHP 環境下的 WEB 服務編程工具,用于創建或調用 WEB 服務。它是一個開源軟件,當前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以與其他支持 SOAP1.1 和 WSDL1.1 的系統互操作。 NuSOAP 完全由PHP語言編寫,由一系列 PHP 類組成,不需要擴展庫的支持,這種特性使得 NuSOAP 可以用于所有的 PHP 環境,不受服務器安全設置的影響。

1. NuSOAP 的獲取和安裝

NuSOAP 項目建立在 SourceForge 上,網絡地址是: http://sourceforge.net/projects/nusoap/ ,這里,可以下載到 NuSOAP 的最新的版本。

NuSOAP 的安裝比較簡單,把下載的 NuSOAP 的文件拷貝到服務器上,可以放在獨立的目錄里,也可以與程序代碼放在相同的目錄里,只要你的 PHP 代碼能夠訪問到這些文件就可以了。

本文的測試環境基于 PHP4.3.2 和 NuSOAP 0.7.2 版本, NuSOAP 安裝在 WEB 目錄“ /nusoap ”里,有兩個子目錄, lib 和 samples 。其中, lib 目錄下存放 NuSOAP 的所有源代碼文件, samples 目錄下是NuSOAP開發小組提供一些的例子。測試文件存放在 WEB 目錄“ /nusoap ”里。

2. NuSOAP 的使用

NuSOAP 由一 PHP 的類組成,其中最常用到的是類soap_server和類soalclient。類soap_server 用于創建 WEB 服務,類soapclient在訪問WEB服務時會用到。

2.1 一個簡單的例子: Hello World

這個例子將利用 NuSOAP 創建一個簡單的 WEB 服務,并利用 NuSOAP 創建一個客戶端程序,調用這個服務。這個服務唯一的功能就是向客戶端返回一個字符串“ Hello World ”。首先,創建 WEB 服務程序代碼文件“ /nusoap/nusoap_server1.php ”:

把 NuSOAP 的源文件包含到當前的代碼文件里:

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. //定義服務程序 
  4. function hello() { 
  5. return ‘Hello World!’; 
  6. //初始化服務對象 , 這個對象是類 soap_server 的一個實例 
  7. $soap = new soap_server; //調用服務對象的 register 方法注冊需要被客戶端訪問的程序。 
  8. //只有注冊過的程序,才能被遠程客戶端訪問到。 
  9. $soap->register(‘hello’); //最后一步,把客戶端通過 post 方式提交的數據,傳遞給服務對象的 service 方法。 
  10. //service 方法處理輸入的數據,調用相應的函數或方法,并且生成正確的反饋,傳回給客戶端。 
  11. $soap->service($HTTP_RAW_POST_DATA); 
  12. ?> 

至此,WEB 服務程序代碼文件已經建好,接下來,創建一個客戶端程序代碼文件“ /nusoap/nusoap_client1.php ”,調用 WEB 服務.

把 NuSOAP 的源文件包含到當前的代碼文件里:

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. //初始化客戶端對象,這個對象是類 soapclient 的一個實例, 
  4. //把服務程序的 URL 地址傳遞給soapclient類的構造函數。 
  5. $client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server1.php’); //利用客戶端對象的 call 方法調用 WEB 服務的程序 
  6. $str=$client->call(‘hello’); //客戶端對象的 getError() 方法可以用來檢查調用過程是否出現錯誤。 
  7. //如果沒有錯誤, getError() 方法返回 false ;如果有錯誤, getError()方法返回錯誤信息。 
  8. if (!$err=$client->getError()) { 
  9. echo ” 程序返回 :”,htmlentities($str,ENT_QUOTES); 
  10. else { 
  11. echo ” 錯誤 :”,htmlentities($err,ENT_QUOTES); 
  12. ?> 

至此,客戶端程序也建立好了,打開瀏覽器,訪問客戶端程序,看一下結果,這個例子,瀏覽器會顯示字符串:“程序返回 :Hello World! ”

2.2 傳遞參數和返回錯誤信息的方法

再通過例子說明傳遞參數和返回錯誤信息的方法。這個例子實現兩個字符串的連接,參數是兩個字符串,返回值是由兩個參數連接而成的字符串。首先,創建服務程序代碼文件“ /nusoap/nusoap_server2.php ”,完整的代碼如下:

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. function concatenate($str1,$str2) { 
  4. if (is_string($str1) && is_string($str2)) 
  5. return $str1 . $str2
  6. else 
  7. return new soap_fault(‘ 客戶端 ‘,”,’concatenate 函數的參數應該是兩個字符串 ‘); 
  8. $soap = new soap_server; 
  9. $soap->register(‘concatenate’); 
  10. $soap->service($HTTP_RAW_POST_DATA); 
  11. ?> 

與 2.1 節 WEB 服務程序的代碼比較,這里的代碼結構大體是相同的。注意以下兩點:

服務程序的定義不同,帶有兩個參數。 NuSOAP 注冊服務程序的過程還是一樣的,都是調用服務對象的 register 方法。

這里使用了 NuSOAP 的一個新類 soap_fault 。當傳入的兩個參數有一個不是字符串時,程序通過這個類把錯誤信息返回給客戶端。這個類的構造函數有 4 個參數:

fault

code

必填參數,建議值為“ Client ”或“ Server ”,指明錯誤是客戶端的錯誤還是服務端的錯誤.

faultactor

預留項,現在還沒有使用

faultstring

錯誤的描述信息

faultdetail

可選項,XML 格式的數據,說明詳細的錯誤信息,客戶端程序代碼文件“ /nusoap/nusoap_client2.php ”的完整內容如下 :

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. $client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.php’); 
  4. $parameters=array(‘ 字符串 1′,’ 字符串 2′); 
  5. $str=$client->call(‘concatenate’,$parameters); 
  6. if (!$err=$client->getError()) { 
  7. echo ” 程序返回 :”,$str
  8. else { 
  9. echo ” 錯誤 :”,$err
  10. ?> 

NuSOAP 的客戶端調用帶參數的 WEB 服務時,使用數組傳遞參數。 $parameters 是一個數組,其中依次是每個參數的值。客戶端在調用遠程的服務程序時,使用帶有兩個參數的 call 方法,第一個參數是服務程序的名稱,第二個參數是服務程序的參數數組,這里是 $parameters 。通過瀏覽器訪問上面的客戶端程序,瀏覽器上會顯示字符串:“ 程序返回 : 字符串 1 字符串 2 ”

接下來,試著給 WEB 服務程序傳入錯誤參數,修改上面的客戶端程序,把生成參數數組的語句改成: $parameters=array(“ 字符串 ”,12) ,再通過瀏覽器訪問客戶端程序,瀏覽器上會顯示字符串:“錯誤 : 客戶端 : concatenate 函數的參數應該是兩個字符串”。 WEB 服務程序判斷傳入的參數有一個不是字符串,通過 soap_fault 給客戶端返回錯誤信息。

2.3 調試的方法

NuSOAP中常用的調試方法有三種:

2.3.1 soapclient 類的 request 和 response 成員變量

最直接的調試方法就是檢查訪問 WEB 服務的過程中,客戶端發出的 request 信息和服務端返回的 response 信息。 soapclient 類的 request 和 response 成員變量包含這些信息,在程序中顯示出這兩個變量的內容,可以幫助分析程序運行的情況??聪旅娴拇a:

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. $client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.php’); 
  4. $parameters=array(‘ 字符串 1′,’ 字符串 2′); 
  5. $str=$client->call(‘concatenate’,$parameters); 
  6. if (!$err=$client->getError()) { 
  7. echo ” 程序返回 :”,$str
  8. else { 
  9. echo ” 錯誤 :”,$err
  10. //下面顯示request和response 變量的內容 
  11. echo ‘<p/>’; 
  12. echo ‘Request:’; 
  13. echo ‘<pre>’,htmlspecialchars($client->request,ENT_QUOTES),’</pre>’; 
  14. echo ‘Response:’; 
  15. echo ‘<pre>’,htmlspecialchars($client->response,ENT_QUOTES ),’</pre>’; 
  16. ?> 

2.3.2 soapclient 類的 debug_str 成員變量

soapclient 類的 debug_str 成員變量提供了更為詳細的調試信息,查看這個變量的內容,可以更好地幫助程序調試。

2.3.3 WEB 服務程序提供的調試方法

WEB 服務程序代碼中,在創建 soap_server 類的實例前,定義變量 $debug=1 。調試信息作為備注,放在 SOAP 消息的尾部返回客戶端,客戶端通過查看 WEB 服務的 response 信息來查看調試信息。

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. function concatenate($str1,$str2) { 
  4. if (is_string($str1) && is_string($str2)) 
  5. return $str1 . $str2
  6. else 
  7. return new soap_fault(‘ 客戶端 ‘,”,’concatenate 函數的參數應該是兩個字符串 ‘); 
  8. $debug=1; //定義調試 
  9. $soap = new soap_server; 
  10. $soap->register(‘concatenate’); 
  11. $soap->service($HTTP_RAW_POST_DATA); 
  12. ?> 

2.4 對 WSDL 的支持

NuSOAP 內部通過類 “WSDL” 實現對 WSDL 的支持。對于 NuSOAP 的用戶來說,不需要關心內部的WSDL類是如何工作的,正確地使用 soap_server 類和 soapclient 類就可以實現對 WSDL 的支持。

2.4.1 創建支持 WSDL 的 WEB 服務

為了實現 WEB 服務程序對 WSDL 的支持,需要使用 soap_server 的 configureWSDL 方法,并且在調用 soap_server 的 register 方法注冊 WEB 服務程序時,需要提供更詳細的參數??聪旅娴拇a,代碼的文件名是 “/nusoap/nusoap_server3.php”。

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. function concatenate($str1,$str2) { 
  4. if (is_string($str1) && is_string($str2)) 
  5. return $str1 . $str2
  6. else 
  7. return new soap_fault(‘ 客戶端 ‘,”,’concatenate 函數的參數應該是兩個字符串 ‘); 
  8. $soap = new soap_server; 
  9. $soap->configureWSDL(‘concatenate’); // 初始化對 WSDL 的支持 
  10. // 注冊服務 
  11. $soap->register(‘concatenate’, 
  12. array(“str1″=>”xsd:string”,”str2″=>”xsd:string”), // 輸入參數的定義 
  13. array(“return”=>”xsd:string”) // 返回參數的定義 
  14. ); 
  15. $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”; 
  16. $soap->service($HTTP_RAW_POST_DATA); 
  17. ?> 

現在打開瀏覽器,訪問剛才建立的文件,http://127.0.0.1/nusoap/nusoap_server3.php,結果如下:

concatenate

View the WSDL for the service. Click on an operation name to view it’s details.

concatenate

點擊函數名稱concatenate,可以看到對函數的描述,點擊”WSDL”,或者訪問WEB服務文件,并在后面加上查詢字符串”?wsdl”(http://127.0.0.1/nusoap/nusoap_server3.php?wsdl),可以得到WEB服務的WSDL內容。

2.4.2 通過 WSDL 調用 WEB 服務

通過 WSDL 調用 WEB 服務,與不通過 WSDL 調用 WEB 服務,程序的結構大體相同。區別在于,通過 WSDL 調用 WEB 服務,初始化 soapclient 類時,傳入兩個參數到 soapclient 的構造函數,第一個參數是 WSDL 文件的地址,第二個參數指定是否使用 WSDL ,指定為 true 即可??聪旅娴拇a,代碼的文件名是 “ /nusoap/nusoap_client3.php ”

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. $client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl’,true); 
  4. $parameters=array(‘ 字符串 1′,’ 字符串 2′); 
  5. $str=$client->call(‘concatenate’,$parameters); 
  6. if (!$err=$client->getError()) { 
  7. echo ” 程序返回 :”,$str
  8. else { 
  9. echo ” 錯誤 :”,$err
  10. ?> 

2.4.3 代理的使用

NuSOAP 提供代理的方法調用遠程 WEB 服務,這種方法,在客戶端程序里面創建一個遠程服務的代理對象,通過代理直接調用遠程的 WEB 服務,而不需要通過 soalclient 類的 call 方法,看下面的代碼:

  1. <?php 
  2. require_once(“lib/nusoap.php”); 
  3. $client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl’,true); 
  4. $proxy=$client -> getProxy(); // 創建代理對象 (soap_proxy 類 ) 
  5. $str=$proxy->concatenate(” 參數 1″,” 參數 2″); // 直接調用 WEB 服務 
  6. if (!$err=$proxy->getError()) { 
  7. echo ” 程序返回 :”,$str
  8. else { 
  9. echo ” 錯誤 :”,$err
  10. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美综合在线观看| 久久久国产一区| 中文综合在线观看| 97精品伊人久久久大香线蕉| 久久精品国产亚洲7777| 欧美精品在线网站| 日本中文字幕久久看| 久久精品视频在线播放| 色多多国产成人永久免费网站| 日韩欧美中文字幕在线播放| 亚洲视频在线视频| 久久久久久综合网天天| 亚洲国产天堂久久国产91| 色小说视频一区| 欧美夜福利tv在线| 在线免费观看羞羞视频一区二区| 国产小视频国产精品| 国产精品一区二区av影院萌芽| 日韩av最新在线观看| 亚洲直播在线一区| 久久国产精品影视| 国产精品自在线| 亚洲成人网在线| 高清日韩电视剧大全免费播放在线观看| 中文在线资源观看视频网站免费不卡| 国产a∨精品一区二区三区不卡| 欧美在线播放视频| 亚洲午夜色婷婷在线| 性色av一区二区三区| 国产视频丨精品|在线观看| 91在线高清免费观看| 久久99热精品这里久久精品| 欧美日韩一区二区三区| 国产精品wwww| 日韩亚洲精品视频| 亚洲午夜女主播在线直播| 中文一区二区视频| 成人精品一区二区三区| 日韩欧美第一页| 亚洲精品视频久久| 全亚洲最色的网站在线观看| 九九热精品视频| 国产婷婷成人久久av免费高清| 日韩精品在线视频观看| 亚洲欧美在线免费观看| 亚洲free性xxxx护士白浆| 欧美视频国产精品| 国产成人精品视频在线| 91久久精品国产91久久| 成人深夜直播免费观看| 日韩亚洲欧美成人| 中文字幕视频在线免费欧美日韩综合在线看| 精品一区二区三区电影| 久久久噜噜噜久久久| 欧美高清不卡在线| 九九热精品视频| 欧美性xxxx极品高清hd直播| 国产精品入口日韩视频大尺度| 亚洲字幕一区二区| 亚洲欧美在线免费观看| 亚洲人成自拍网站| 中文欧美日本在线资源| 久久综合伊人77777蜜臀| 欧美一级大片在线观看| 中文字幕亚洲激情| 欧美成人精品激情在线观看| 日韩在线免费高清视频| 精品久久久国产| 日韩人体视频一二区| 91久久精品国产| 91精品啪在线观看麻豆免费| 精品高清美女精品国产区| 国产亚洲一区二区在线| 精品国偷自产在线视频| xxxx欧美18另类的高清| 成人性生交xxxxx网站| 97成人在线视频| 7m第一福利500精品视频| 欧美贵妇videos办公室| 国产欧美久久久久久| 久久91亚洲人成电影网站| 久久久噜久噜久久综合| 国产日韩精品在线观看| 欧美人与性动交a欧美精品| 欧美日韩国产va另类| 中文精品99久久国产香蕉| 亚洲欧美日韩久久久久久| 中文字幕无线精品亚洲乱码一区| 国产精品男人爽免费视频1| 亚洲欧美日韩视频一区| 免费不卡欧美自拍视频| 在线午夜精品自拍| 夜夜嗨av一区二区三区四区| 久久久久久久久久国产精品| 亚洲福利视频免费观看| 国产三级精品网站| www欧美日韩| 亚洲成人黄色在线| 伊人av综合网| 国产欧美精品va在线观看| 日本一区二区三区在线播放| 精品久久久久久久久久久久久| 美日韩丰满少妇在线观看| 欧美一级免费看| 91久久精品美女高潮| 97久久精品在线| 欧美成人四级hd版| 国产91在线高潮白浆在线观看| 91视频免费网站| 国产精品视频资源| 精品久久久久久久久久久久久| 久久亚洲精品小早川怜子66| 国产成人精品av| 这里只有精品视频| x99av成人免费| 欧美在线欧美在线| 美女视频黄免费的亚洲男人天堂| 91美女高潮出水| 亚洲乱码一区av黑人高潮| 国产日韩中文在线| y97精品国产97久久久久久| 51精品国产黑色丝袜高跟鞋| 中文字幕av一区二区三区谷原希美| 国内免费精品永久在线视频| 亚洲国产精品久久久久秋霞蜜臀| 久久久之久亚州精品露出| 91精品视频播放| 日韩视频免费大全中文字幕| 日韩在线视频网| 欧美日韩国产区| 日韩精品极品视频免费观看| 亚洲日本aⅴ片在线观看香蕉| 国产欧美精品一区二区| 日韩大陆欧美高清视频区| 在线免费看av不卡| 国产精品成av人在线视午夜片| 一区二区三区精品99久久| 亚洲精品久久久久中文字幕二区| 另类天堂视频在线观看| 欧美插天视频在线播放| 国产v综合v亚洲欧美久久| 欧美国产日韩中文字幕在线| 国产精品久久久久aaaa九色| 成人欧美一区二区三区在线湿哒哒| 91欧美视频网站| 91亚洲永久免费精品| 亚洲欧美福利视频| 国产九九精品视频| 一本色道久久综合狠狠躁篇怎么玩| 亚洲va久久久噜噜噜久久天堂| 久久av红桃一区二区小说| 亚洲精品国精品久久99热| 欧美乱大交做爰xxxⅹ性3| 国产精品久久在线观看| 秋霞午夜一区二区| 久久人人爽亚洲精品天堂| 日韩在线视频观看正片免费网站| 亚洲国产精品久久91精品| 欧美一区二区.| 91免费人成网站在线观看18| 久久99久久99精品中文字幕| 91情侣偷在线精品国产| 日韩av在线免费播放| 91精品国产综合久久久久久久久|