在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

在PHP中運(yùn)用XML技術(shù)構(gòu)造遠(yuǎn)程服務(wù)(轉(zhuǎn))

在PHP中運(yùn)用XML技術(shù)構(gòu)造遠(yuǎn)程服務(wù)(轉(zhuǎn))

更新時(shí)間:2022-05-06 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

在PHP中利用XML技術(shù)構(gòu)造遠(yuǎn)程服務(wù)

未來(lái)的Web將是以服務(wù)為中心的Web,XML_RPC標(biāo)準(zhǔn)使得編寫(xiě)和應(yīng)用服務(wù)變得非常簡(jiǎn)單。本文介紹XML_RPC標(biāo)準(zhǔn)及其PHP實(shí)現(xiàn),并通過(guò)實(shí)例示范了如何在PHP中開(kāi)發(fā)XML_RPC服務(wù)和客戶程序。

一、服務(wù)式Web
從內(nèi)容提供商所采用的簡(jiǎn)單方法到UDDI(Universal Description,Discovery and Integration)的未來(lái)構(gòu)想,業(yè)界已經(jīng)有大量關(guān)于“服務(wù)式Web”的說(shuō)明和評(píng)論。就Web的初創(chuàng)階段來(lái)說(shuō),它只是一個(gè)文檔的集散地,提供的只是一些可瀏覽的信息。隨著Web的發(fā)展,在Web上運(yùn)行服務(wù)越來(lái)越具有吸引力。未來(lái),Web將成為企業(yè)為客戶和其他企業(yè)提供便捷服務(wù)的載體。B2B和B2C模式間的協(xié)同就可以看成是一種服務(wù)式Web。

一個(gè)很重要的問(wèn)題是,Web上究竟可以提供哪些服務(wù)?Web能夠提供的服務(wù)非常多,其中有些服務(wù)現(xiàn)在已經(jīng)在使用,有些服務(wù)在不久的將來(lái)就會(huì)出現(xiàn)。為了說(shuō)明問(wèn)題,下面列出了一小部分可以通過(guò)Web提供的服務(wù):

面向主題的垂直搜索引擎。
供用戶查找信息的知識(shí)庫(kù)。
用戶可以請(qǐng)教問(wèn)題的專(zhuān)家系統(tǒng)。
銀行服務(wù)。
新聞和信息出版服務(wù)。
數(shù)字化支付相關(guān)的服務(wù)。
圖形處理服務(wù)。
衛(wèi)生和健康服務(wù)。

那么,企業(yè)和組織通過(guò)Web提供服務(wù)的正確途徑是什么呢?這是一個(gè)很重要的問(wèn)題。今天,有些服務(wù)提供HTML界面,它們通過(guò)文檔的形式提供服務(wù),但在服務(wù)界面的背后隱藏著什么?在占領(lǐng)Web的競(jìng)賽中,Web瀏覽器并不孤單,移動(dòng)電話、手持設(shè)備以及微波爐之類(lèi)的設(shè)備都想要訪問(wèn)Web、查詢數(shù)據(jù)庫(kù)、轉(zhuǎn)換數(shù)據(jù)、提取信息,等等。要實(shí)現(xiàn)真正的服務(wù)式Web,在表現(xiàn)層(HTML)之下應(yīng)該還有另外一層。

二、XML_RPC標(biāo)準(zhǔn)
XML或許是近10年來(lái)最為重要的標(biāo)準(zhǔn),XML詞匯表(Vocabulary)為企業(yè)構(gòu)造服務(wù)環(huán)境提供了基石。要構(gòu)建服務(wù)式Web就有必要學(xué)習(xí)XML_RPC標(biāo)準(zhǔn),這不僅是因?yàn)閄ML_RPC對(duì)于把服務(wù)放到Web上很有用,而且因?yàn)閄ML_RPC是一種已經(jīng)成形的、很容易采用的標(biāo)準(zhǔn)。對(duì)于B2B服務(wù)來(lái)說(shuō),提供服務(wù)的標(biāo)準(zhǔn)是極其重要的,共同遵循標(biāo)準(zhǔn)的公司可以利用其它公司提供的服務(wù)獲得快速的增長(zhǎng)。無(wú)法想象在各種私有的服務(wù)標(biāo)準(zhǔn)之上可以建立起真正的服務(wù)式Web,服務(wù)必須有一種可以遵循的標(biāo)準(zhǔn)。

XML_RPC是一種面向Internet分布式處理的標(biāo)準(zhǔn)。RPC即為Remote Procedure Call(遠(yuǎn)程過(guò)程調(diào)用)的縮寫(xiě),它是一種遠(yuǎn)程調(diào)用機(jī)制,用于調(diào)用可能駐留在其他機(jī)器之上以及可能用其他語(yǔ)言編寫(xiě)的過(guò)程。遠(yuǎn)程過(guò)程調(diào)用是分布式計(jì)算的重要支柱。例如,在一個(gè)分布式計(jì)算環(huán)境中,我們可以尋找和利用在其他機(jī)器上運(yùn)行的執(zhí)行加法和減法操作的過(guò)程,執(zhí)行加法操作的過(guò)程可能用APL編寫(xiě)、在RS6000機(jī)器上運(yùn)行,執(zhí)行減法操作的過(guò)程可能用C編寫(xiě)、在Unix上運(yùn)行。其他要使用這種分布式計(jì)算器的開(kāi)發(fā)者同樣可以利用它們,或者他也可以選用另外更好的計(jì)算器。

在RPC中,過(guò)程(Procedure)是最主要的構(gòu)件,服務(wù)器提供的就是供客戶端調(diào)用的過(guò)程。過(guò)程可以接收參數(shù)并返回結(jié)果。XML_RPC以HTTP作為協(xié)議載體,通過(guò)發(fā)送和接收數(shù)據(jù)的XML詞匯表實(shí)現(xiàn)RPC機(jī)制。XML_RPC服務(wù)器接收XML_RPC請(qǐng)求并返回XML_RPC應(yīng)答,XML_RPC客戶程序發(fā)送XML_RPC請(qǐng)求并接收XML_RPC應(yīng)答。服務(wù)器和客戶必須按照XML_RPC標(biāo)準(zhǔn)的要求處理應(yīng)答和請(qǐng)求。

三、XML_RPC協(xié)議
完整的XML_RPC規(guī)范可以在http://www.xmlrpc.com/spec找到。下面是其要點(diǎn)說(shuō)明。

3.1 XML_RPC請(qǐng)求

XML_RPC請(qǐng)求應(yīng)該是HTTP POST請(qǐng)求,它的正文是XML格式。請(qǐng)求的XML部分格式如下:

<?xml version="1.0" ?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>


指定數(shù)據(jù)發(fā)送到哪里的URL并未在這里指定。如果服務(wù)器專(zhuān)門(mén)用來(lái)進(jìn)行RPC處理,它可能是“/”。上述XML文檔中的有效載荷是一個(gè)“methodCall”結(jié)構(gòu)。methodCall必須包含一個(gè)“methodName”子元素,“methodName”子元素包含一個(gè)描述待調(diào)用方法的字符串。如何解釋“methodName”的內(nèi)容完全由服務(wù)器決定,例如它可以是一個(gè)執(zhí)行文件的名字,可以是數(shù)據(jù)庫(kù)中記錄的名字,或者任何其他東西。如果過(guò)程接收參數(shù),“methodCall”可以包含一個(gè)“params”元素以及若干個(gè)“param”子元素。每一個(gè)“param”元素包含一個(gè)帶有類(lèi)型描述符的值,類(lèi)型描述符如下表所示:


標(biāo)記 說(shuō)明
<i4>或<int> 四字節(jié)的帶符號(hào)整數(shù),如12
<boolean> 0(false),或1(true)
<string> 字符串,如“Hello World”
<double> 雙精度帶符號(hào)浮點(diǎn)數(shù),如-12.214
<dateTime.iso8601> 日期/時(shí)間,如19980717T14:08:55
<base64> base64編碼的二進(jìn)制數(shù)據(jù),如eW91IGbid0IHJlQgdGhpcyE


3.1.1 結(jié)構(gòu)

值可以是一個(gè)結(jié)構(gòu),結(jié)構(gòu)用<struct>元素描述。每個(gè)<struct>包含多個(gè)<member>,每個(gè)<member>包含一個(gè)<name>和一個(gè)<value>。下面是一個(gè)由兩個(gè)元素構(gòu)成的結(jié)構(gòu):

<struct>
<member>
<name>name</name>
<value><string>member1</string></value>
</member>
<member>
<name>member2</name>
<value><i4>19</i4></value>
</member>
</struct>


<struct>可以嵌套,任意<value>可以包含<struct>或者任意其它類(lèi)型,包括<array>。

3.1.2 數(shù)組

值可以是數(shù)組類(lèi)型,數(shù)組用<array>元素描述。每個(gè)<array>元素包含一個(gè)<data>元素,<data>元素里面可以包含任意多個(gè)<value>元素。下面是數(shù)組元素的一個(gè)例子:

<array>
<data>
<value><boolean>0</boolean></value>
<value><i4>9</i4></value>
<value><string>Hello</string></value>
</data>
</array>


<array>元素沒(méi)有名字。如前例所示,<array>元素的值可以是各種類(lèi)型。<array>元素可以嵌套,任何<value>都可以包含<array>或者其他類(lèi)型,如上面介紹的<struct>。

3.2 XML_RPC應(yīng)答

XML_RPC應(yīng)答是一個(gè)HTTP應(yīng)答,內(nèi)容類(lèi)型是text/xml。應(yīng)答正文的格式如下:

<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><string>ABCDEFG</string></value>
</param>
</params>
</methodResponse>


<methodResponse>可能包含一個(gè)<params>結(jié)構(gòu),或者可能包含一個(gè)<fault>結(jié)構(gòu),具體由過(guò)程調(diào)用是否成功決定。<params>結(jié)構(gòu)與XML請(qǐng)求中的一樣,<fault>元素的語(yǔ)法如下:

<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>4</int></value>
</member>
<member>
<name>faultString</name>
<value><string>Error!</string></value>
</member>
</struct>
</value>
</fault>


四、基于XML_RPC的Web服務(wù)
利用XML_RPC構(gòu)造和使用服務(wù)是很方便的。企業(yè)為自己提供的各種服務(wù)部署XML_RPC服務(wù)器,用戶、客戶軟件和客戶企業(yè)就可以使用這種服務(wù)構(gòu)造出高端服務(wù)或者面向最終用戶的應(yīng)用。這種提供更有效、廉價(jià)和優(yōu)質(zhì)服務(wù)的競(jìng)爭(zhēng)將極大地提高應(yīng)用服務(wù)的質(zhì)量。

但這里還存在一些問(wèn)題有待解決,例如怎樣編目、索引、搜索Web上的服務(wù)?UDDI試圖解決這個(gè)問(wèn)題,不過(guò)這個(gè)標(biāo)準(zhǔn)并不簡(jiǎn)單,而且業(yè)界對(duì)它的反應(yīng)也尚未明了。然而,在企業(yè)內(nèi)部應(yīng)用XML_RPC不僅能夠改善代碼的可重用性,而且還會(huì)帶來(lái)一種全新的分布式計(jì)算模式,在此后的數(shù)年中它必將成為一種重要的知識(shí)財(cái)富。XML_RPC的發(fā)展從解決分布式計(jì)算問(wèn)題以及成為服務(wù)式Web的基本層面開(kāi)始,從而獲得了一個(gè)非常好的開(kāi)端,其后必將緊隨著人們對(duì)該標(biāo)準(zhǔn)的熱衷。既然如此,現(xiàn)在就讓我們來(lái)看看XML_RPC的實(shí)際應(yīng)用吧!

4.1 在PHP中應(yīng)用XML_RPC

對(duì)于提供Web服務(wù)來(lái)說(shuō),PHP是一種非常理想的語(yǔ)言。我們只需編寫(xiě)好PHP代碼然而把它放到一個(gè)合適的位置,就立即有了一個(gè)可通過(guò)URL“調(diào)用”的服務(wù)。PHP中的XML_RPC實(shí)現(xiàn)可能復(fù)雜也可能簡(jiǎn)單,但我們擁有許多種選擇。這里我們選用的是來(lái)自Useful Information Company的XML_RPC實(shí)現(xiàn),它的代碼和文檔可以從http://xmlrpc.usefulinc.com/下載。

這個(gè)XML_RPC實(shí)現(xiàn)的基本類(lèi)涉及兩個(gè)文件:

xmlrpc.inc:包含XML_RPC的php客戶端所需要的類(lèi)

xmlrpcs.inc:包含XML_RPC的php服務(wù)器所需要的類(lèi)

4.2 客戶端

編寫(xiě)XML_RPC客戶端意味著:

1.創(chuàng)建一個(gè)XML_RPC請(qǐng)求消息

2.設(shè)置XML_RPC參數(shù)

3.創(chuàng)建一個(gè)XML_RPC消息

4.發(fā)送消息

5.獲得應(yīng)答

6.解釋?xiě)?yīng)答

請(qǐng)看下面這個(gè)例子:

<?php
$f=new xmlrpcmsg('examples.getStateName',array(new xmlrpcval(14, "int")));
$c=new xmlrpc_client("/RPC2", "betty.userland.com", 80);
$r=$c->send($f);
$v=$r->value();
if (!$r->faultCode()) {
print "狀態(tài)代碼". $HTTP_POST_VARS["stateno"] . "是" .
$v->scalarval() . "<BR>";
print "<HR>這是服務(wù)器的應(yīng)答<BR><PRE>" .
htmlentities($r->serialize()). "</PRE><HR>\n";
} else {
print "錯(cuò)誤: ";
print "代碼: " . $r->faultCode() .
" 原因: '" .$r->faultString()."'<BR>";
}
?>


在這個(gè)例子中,我們先創(chuàng)建了一個(gè)調(diào)用“examples.getStateName”方法的XML_RPC消息,并傳遞了一個(gè)類(lèi)型為“int”值為14的整數(shù)參數(shù)。然后,我們創(chuàng)建了一個(gè)描述待調(diào)用URL(路徑、域和端口)的客戶。接著,我們發(fā)送了消息,接收應(yīng)答對(duì)象并檢查錯(cuò)誤。如果不存在錯(cuò)誤,我們就顯示結(jié)果。

編寫(xiě)RPC客戶程序時(shí)要用到的主要函數(shù)如下:

創(chuàng)建客戶用:

$client=new xmlrpc_client($server_path, $server_hostname, $server_port);

發(fā)送消息的方法是:

$response=$client->send($xmlrpc_message);

它返回的是xmlrpcresp的一個(gè)實(shí)例。我們所傳遞的消息是xmlrpcmsg的實(shí)例,它用如下方法創(chuàng)建:

$msg=new xmlrpcmsg($methodName, $parameterArray);

methodName是待調(diào)用的方法(過(guò)程)的名字,parameterArray是xmlrpcval對(duì)象的php數(shù)組。例如:

$msg=new xmlrpcmsg("examples.getStateName", array(new xmlrpcval(23, "int")));

xmlrpcval對(duì)象可以用如下形式創(chuàng)建:

<?php
$myVal=new xmlrpcval($stringVal);
$myVal=new xmlrpcval($scalarVal, "int" | "boolean" | "string" | "double" | "dateTime.iso8601" | "base64");
$myVal=new xmlrpcval($arrayVal, "array" | "struct");
?>


第一種形式創(chuàng)建的是xmlrpc字符串值。第二種形式創(chuàng)建的是描述值和類(lèi)型的值。第三種形式通過(guò)在數(shù)組之類(lèi)的結(jié)構(gòu)中組合其他xmlrpc值創(chuàng)建復(fù)雜的對(duì)象,例如:

<?php
$myArray=new xmlrpcval(array(new xmlrpcval("Tom"), new xmlrpcval("Dick"),new xmlrpcval("Harry")), "array");
$myStruct=new xmlrpcval(array(
"name" => new xmlrpcval("Tom"),
"age" => new xmlrpcval(34, "int"),
"geek" => new xmlrpcval(1, "boolean")),"struct");
?>


應(yīng)答對(duì)象是xmlrpcresp類(lèi)型,通過(guò)調(diào)用客戶對(duì)象的send方法獲得。在服務(wù)器端,我們可以通過(guò)如下方式創(chuàng)建xmlrpcresp類(lèi)型的對(duì)象:

$resp=new xmlrpcresp($xmlrpcval);

而在客戶端,則使用如下方法從應(yīng)答獲取xmlrpcval:

$xmlrpcVal=$resp->value();

接下來(lái)我們就可以用下面這種方式獲取描述應(yīng)答結(jié)果的PHP變量:

$scalarVal=$val->scalarval();

對(duì)于復(fù)雜的數(shù)據(jù)類(lèi)型,有兩個(gè)函數(shù)非常有用,這兩個(gè)函數(shù)都在xmlrpc.inc內(nèi):

$arr=xmlrpc_decode($xmlrpc_val);

該函數(shù)返回一個(gè)PHP數(shù)組,其中包含了xmlrpcval變量$xmlrpc_val之內(nèi)的數(shù)據(jù),這些數(shù)據(jù)已經(jīng)被轉(zhuǎn)換成PHP本身具有的變量類(lèi)型。

$xmlrpc_val=xmlrpc_encode($phpval);

該函數(shù)返回一個(gè)xmlrpcval類(lèi)型的值,其中包含了$phpval描述的PHP數(shù)據(jù)。對(duì)于數(shù)組和結(jié)構(gòu),此方法能夠進(jìn)行遞歸分析。注意,這里不存在對(duì)非基本數(shù)據(jù)類(lèi)型(如base-64數(shù)據(jù),或者日期-時(shí)間數(shù)據(jù))的支持。

4.3 服務(wù)器端

利用xmlrpcs.inc提供的類(lèi)編寫(xiě)服務(wù)非常簡(jiǎn)單。要?jiǎng)?chuàng)建一個(gè)服務(wù),我們按照如下方式創(chuàng)建xmlrpc_server的實(shí)例:

<?php
$s=new xmlrpc_server( array("examples.myFunc" =>
array("function" => "foo")));
?>

傳遞給xmlrpc_server構(gòu)造函數(shù)的是一個(gè)聯(lián)合數(shù)組的聯(lián)合數(shù)組。過(guò)程“examples.myFunc”調(diào)用“foo”函數(shù),由于這個(gè)原因foo被稱為方法句柄。

編寫(xiě)方法句柄很簡(jiǎn)單。下面是一個(gè)方法句柄的骨架:

<?php
function foo ($params) {
global $xmlrpcerruser; // 引入用戶錯(cuò)誤代碼值
// $params是一個(gè)xmlrpcval對(duì)象的數(shù)組
if ($err) {
// 錯(cuò)誤條件
return new xmlrpcresp(0, $xmlrpcerruser+1, // 用戶錯(cuò)誤1
"Error!");
} else {
// 成功
return new xmlrpcresp(new xmlrpcval("Fine!", "string"));
}
}
?>


可以看到,程序檢查了錯(cuò)誤,如存在錯(cuò)誤則返回錯(cuò)誤(從$xmlrpcerruser+1開(kāi)始);否則如果一切正常,則返回描述操作成功信息的xmlrpcresp。

五、應(yīng)用實(shí)例
在下面這個(gè)例子中我們將構(gòu)造一個(gè)服務(wù)。對(duì)于給定的數(shù)值n,服務(wù)返回n*2?蛻舳死迷摲⻊(wù)計(jì)算5*2的值。

服務(wù)器端的代碼如下:

<?php
include("xmlrpc.inc");
include("xmlrpcs.inc");
function foo ($params)
{
global $xmlrpcerruser; // 引入用戶錯(cuò)誤代碼值
// $params是xmlrpcval對(duì)象的一個(gè)數(shù)組
$vala=$params->params[0];
$sval=$vala->scalarval();
$ret=$sval*2;
return new xmlrpcresp(new xmlrpcval($ret, "int"));
}
$s=new xmlrpc_server( array("product" =>
array("function" => "foo")));
?>


客戶端代碼如下:

<?php
include("xmlrpc.inc");
if ($HTTP_POST_VARS["number"]!="") {
$f=new xmlrpcmsg('product',array(new xmlrpcval($HTTP_POST_VARS["number"], "int")));
$c=new xmlrpc_client("/xmlrpc/servfoo.php", "luigi.melpomenia.com.ar", 80);
$c->setDebug(0);
$r=$c->send($f);
$v=$r->value();
if (!$r->faultCode()) {
print "Number ". $HTTP_POST_VARS["number"] . " is " .
$v->scalarval() . "<BR>";
print "<HR>來(lái)自服務(wù)器的結(jié)果!<BR><PRE>" .
htmlentities($r->serialize()). "</PRE><HR>\n";
} else {
print "操作失敗: ";
print "代碼: " . $r->faultCode() .
" 原因: '" .$r->faultString()."'<BR>";
}
}
print "<FORM METHOD=\"POST\">
<INPUT NAME=\"number\" VALUE=\"${number}\">
<input type=\"submit\" value=\"go\" name=\"submit\"></FORM><P>
輸入一個(gè)數(shù)值";
?>


結(jié)束語(yǔ):XML_RPC服務(wù)的運(yùn)作還涉及其他許多基礎(chǔ)設(shè)施和基礎(chǔ)工作,如分布式過(guò)程的編目和索引機(jī)制,又如在編程語(yǔ)言中處理XML_RPC的更好接口等。有關(guān)XML_RPC和服務(wù)式Web的報(bào)道非常多,讓我們密切關(guān)注它們的發(fā)展吧!

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 亚州精品一二三区| 日韩在线不卡一区| 88av.com| 秋霞在线一区二区| 狠狠干 狠狠操| 精品免费国产一区二区| 97成人在线观看视频| 秋霞无码一区二区| av在线无限看| 一级 黄 色 片一| 99热这里只有精品免费| 日韩激情视频一区二区| 无罩大乳的熟妇正在播放| 无码人妻精品一区二区蜜桃网站| 欧日韩免费视频| 国产性xxxx18免费观看视频| 做a视频在线观看| 国产成人黄色网址| 日本爱爱免费视频| 亚洲欧美另类动漫| 欧美性猛交xxxx乱大交91| 夜夜夜夜夜夜操| 国产毛片久久久久久国产毛片| www.69av| 国产精品视频中文字幕| 特级毛片在线免费观看| 日韩欧美视频网站| 欧美三级午夜理伦三级富婆| 欧美少妇一级片| 久久精品99国产| 欧美精品在欧美一区二区| 好吊妞无缓冲视频观看| 亚洲精品mv在线观看| 给我免费播放片在线观看| 国产一区亚洲二区三区| 无码人妻aⅴ一区二区三区日本| 欧美激情第四页| 色诱视频在线观看| 野外做受又硬又粗又大视频√| 无码中文字幕色专区| 99精品视频网站| 欧美一级黄色片视频| 激情五月宗合网| 日韩中文字幕在线不卡| 欧美aaa在线观看| 亚洲综合婷婷久久| 手机av在线免费| 不用播放器的免费av| 亚洲国产日韩欧美在线观看| 成人一区二区三| 岛国毛片在线播放| 最新中文字幕2018| 蜜臀一区二区三区精品免费视频| 国产精品沙发午睡系列| 日本老熟妇毛茸茸| 污污动漫在线观看| av一区二区三区免费观看| 成年在线观看视频| 成年人网站免费视频| 久久久精品麻豆| 日韩国产成人无码av毛片| 精品国产一区三区| 韩国中文字幕av| 9色porny| 伊人五月天婷婷| 777米奇影视第四色| 丰满女人性猛交| wwwwxxxx日韩| 狠狠爱免费视频| 国产精品www在线观看| 日本www.色| 国产偷人视频免费| 国内少妇毛片视频| 最新中文字幕久久| 免费成人黄色大片| 亚洲天堂av一区二区| 欧美aⅴ在线观看| 欧美二区在线视频| 久久久久久免费看| 久久久天堂国产精品| 少妇久久久久久被弄到高潮| 91视频福利网| 潘金莲一级淫片aaaaaa播放1| 情侣黄网站免费看| 8x8x最新地址| 日韩av影视大全| 亚洲一区 在线播放| 国产免费一区二区视频| 国产伦精品一区二区三区四区视频_| 久久亚洲国产成人精品无码区| 国产精品啪啪啪视频| 真人抽搐一进一出视频| 国产精品一色哟哟| 亚洲最大成人在线观看| 天天干天天曰天天操| 免费人成自慰网站| 亚洲成人天堂网| 国内精品视频一区二区三区| 黄色三级视频片| 福利视频免费在线观看| 波多野结衣xxxx| 欧洲精品在线播放| 91aaa精品| 天天操天天摸天天爽| 天堂8在线天堂资源bt| 亚洲天堂2018av| 免费在线观看的毛片| 加勒比成人在线| 国产卡一卡二在线| 国产aⅴ爽av久久久久| 亚洲成人福利在线观看| 91精品91久久久中77777老牛| 国产精品视频一二三四区| www.五月天色| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 日本一二三区在线| 天堂社区在线视频| 色噜噜狠狠永久免费| 日本特黄a级片| 一区中文字幕在线观看| 成人黄色一级大片| 日韩一级特黄毛片| 欧美在线一区视频| 无人在线观看的免费高清视频| 欧美激情 国产精品| 人妻内射一区二区在线视频| 中文字幕视频在线免费观看| 极品粉嫩美女露脸啪啪| 男人添女人荫蒂免费视频| 成年人午夜免费视频| 亚洲xxx在线观看| 日韩欧美精品免费| 日本一二三四区视频| 男女猛烈激情xx00免费视频| 999精品网站| av 日韩 人妻 黑人 综合 无码| 999香蕉视频| 国产成人一区二区三区别| 三级一区二区三区| 日韩在线xxx| 欧美私人情侣网站| www插插插无码免费视频网站| 日韩在线一区视频| 国产精品亚洲a| 啊啊啊一区二区| 日本手机在线视频| 99色这里只有精品| 久久久久久久香蕉| 日本欧美视频在线观看| 艳母动漫在线免费观看| 免费看黄色a级片| 毛片av在线播放| 毛片在线视频观看| 精品成在人线av无码免费看| 亚洲国产精品无码观看久久| 黄色片免费在线观看视频| 无码人妻精品一区二区蜜桃网站| 国产一二三四五| 国产xxxxx在线观看| www.日本xxxx| a级片一区二区| 日韩手机在线观看视频| 亚洲综合伊人久久| 国产特级淫片高清视频| 天天操狠狠操夜夜操| 激情六月天婷婷| xxww在线观看| 香港三级韩国三级日本三级| 欧美色图另类小说| 五月丁香综合缴情六月小说| 91精品91久久久中77777老牛| 成人性做爰aaa片免费看不忠| 一区中文字幕在线观看| 天天干天天草天天| 玖玖精品在线视频| 国产免费人做人爱午夜视频| 国产福利精品一区二区三区| 日韩成人av免费| 男人操女人免费| 粉嫩av一区二区三区天美传媒| 日av中文字幕| 久久久久久av无码免费网站下载| 中国一级黄色录像| 鲁一鲁一鲁一鲁一色| 韩国一区二区av| gogogo免费高清日本写真| 色网站在线视频| 一二三在线视频| 男人添女人下部高潮视频在观看| 99热在线这里只有精品| 日本美女视频一区| 国产精品自拍合集| 国产精品涩涩涩视频网站| 91av视频免费观看| 日日碰狠狠添天天爽超碰97| 无码日韩人妻精品久久蜜桃| 超碰人人草人人| 欧美伦理视频在线观看| 免费高清一区二区三区| 成人免费在线观看视频网站|