残りのように、せっけんの両方を用いる実装を生成してリクエストを処理し、次に応答します。 せっけんの処理が応答が、残りの結果と同様に、リクエストを生成して石鹸はかなり異なっています。
残りとは違って、珍しいことを見ているとはいえ、手動でリクエストを生成し、まだ行われたことができます。 通常、石鹸のご要望は、どちらかを生成する汎用ツール(または梨のようなnusoap :せっけん)や、アプリケーション特有のクラスまたはモジュールです。 マニュアル世代の距離は、ここ(十分に理解し、どのように動作するには意外に便利)と同様nusoapます。
アプリケーションには、特定のツールになるだろう無視され、いくつか理由があります。 定義されている特定のアプリケーションは、非常に有用ではないと、この記事を総称します。 第二に、さまざまなツールがインターフェイスや機能のレベル、およびトピックをするためには、それは正義の深さを必要とするようにします。 最後に、私はしっかりとしている場合は、意見の方法を見つけ出すことができ仕事をすることnusoap (または生は、そのことについては)を取得することができ、アプリケーション固有のツールをあまりにも仕事をします。
リクエストを生成し、手動でせっけんではありませんあまりにも違うの残りのリクエストを生成します。 プロセスを生成して、実際にリクエストを送信することは二つに分かれた個別の機能を、デモを目的にします。
|
|
リクエストを生成するための自体のように、私が選ばれた生成前の文字列を使用すると、実行時に必要な値は、単に書き込まれました。 そこにはもっと複雑なオプション( simplexmlのような文書を作成し、または作成して実行するごとにスクラッチから)が、それらは本当に必要はありません:
functioncreaterequest ( $ devkey 、 $アクション、 $タイプ、 $キーワード)
(
リクエストドル= " < ? xmlversion = \ " 1.0 \ "エンコーディング= \ " utf - 8で\ "単体= \ "ありません\ " ? >
<せっけん- env :封筒
xmlns : env -せっけん= \ " http://schemas.xmlsoap.org/soap/envelope/ \ "
xmlns : xsd = \ " http://www.w3.org/2001/xmlschema \ "
xmlns : xsi = \ " http://www.w3.org/2001/xmlschema-instance \ " >
< env -せっけん:ボディ>
< devkey xsi :教育= \ " xsd : int \ " > $ devkey < / devkey >
<アクションxsi :教育= \ " xsd :文字列\ " > $アクション< /アクション>
<タイプxsi :教育= \ " xsd :文字列\ " > $タイプ< /タイプ>
<キーワードxsi :教育= \ " xsd :文字列\ " > $キーワード< /キーワード>
< / env -せっけん:ボディ>
< / env -せっけん:封筒> " ;
リクエストを返す$ ;
)
お察しのように、この関数は、ほぼ同じくらい簡単に取得することができます。 注意して変数にエンコードされていない;それが送られていませんので、 urlに(明白な音が、それは簡単にミスでも)します。
実際には、呼び出しapiのリクエストを送信するには、いくつかのコードからの借り入れの残りの最初の例では、リクエストを送信されるので、生のこの時期にします。
functioncallsoapapi ( $データ)
(
$のurl = " http://library.example.com/api/soap/search " ;
$ url_infoするparse_url = ( $ url )を;
ホスト$ = $ url_info [ 'ホスト' ] ;
パス$ = $ url_info [ 'パス' ] ;
私が住んでいるのかもしれないだけで$ホストおよびパス変数$の開始が、これなければならない明確にします。 生産システムでは、いくつかのcpuサイクルを保存することができ、これらの要素をhardcodingされました。
$ fp =にfsockopen ( $ホスト、 80 ) ;
fputs ( $ fp 、 "を得る"とします。 $パス。 " http/1.1 \ r \ " ) ;
fputs ( $ fp 、 "ホスト: "します。 $ホストします。 " \ r \ " ) ;
fputs ( $ fp 、 "を受け入れる: * / * \ r \ " ) ;
fputs ( $ fp 、 "のaccept - charset名: iso - 8859 - 1 、 utf - 8で;問= 0.7 、 * ;問= 0.7 \ r \ " ) ;
fputs ( $ fp 、 "接続:閉じる\ r \ " ) ;
fputs ( $ fp 、 "コンテンツタイプ:アプリケーション/ xmlのせっけん+ \ r \ " ) ;
fputs ( $ fp 、 "コンテンツの長さ: "します。 strlen ( $データ)します。 " \ r \ n \ r \ " ) ;
fputs ( $ fp 、 " $データ" ) ;
このブロックには、前の例とほぼ同じです。 前の例は、リクエストの投稿が、これは、 getリクエストは、変更されることによって変化するのapiあなたはどんな仕事をします。 content - typeヘッダは、さまざまな情報を正確に反映することができ、この時期を送信する必要があり、もちろん$のデータを送信するので、コンテンツの長さはありません- 0 。
応答$ = " " ;
中( ! feof ( $ fp ) )
(
$ .=応答するfgets ( $ fp 、 128 ) ;
)
fclose ( $ fp ) ;
リスト( $ http_headers 、 $ http_content ) =爆発( " \ r \ n \ r \ " 、 $応答) ;
戻り$ http_content ;
)
このセクションでは、残りの例でも同じにします。 ラッピング応答の両方を取得するには、これらの関数のみ辛うじて触れる価値がある:
リクエストドル= createrequest ( '123 ' 、 '検索' 、 '本' 、 'スタイル) ;
応答ドル= callsoapapi ( $リクエスト) ;
あまりにもハードではない!
残りとは違って、使用することはできませんただfile_get_contents ( )のヒットをapiのため、体のxmlを送信する必要があり、リクエストします。 そしてfile_put_contents ( )のどちらかの仕事を慣れるため、応答する必要があり(そしてfile_put_contents ( )を返すint )は、他のオプションがあります。 梨( http://pear.php.net )は、たとえば、 httpの束には、固有の関数を取ることができるいくつかの頭痛のリクエストをオフにして手を手動で作成するが、それでもすべての柔軟性を得ることができ、マニュアル作成します。
何のためのプログラム以外のワンショット、私は絶対にお勧めしに行って、ある種のせっけんモジュールを使用して、コーディングの生活を楽にします。 しかし、問題を実行している場合、トラッキングすることができたが、これはちょっと痛みます。 私のようなボックスを使って、地元の開発、開発中ので、物事を開始すべきだろうパケットスニファを使用することができ不首尾に私を見て、リクエスト/レスポンスは、そのままの形式です。
概念的に使用して、 nusoapではありませんあまりにも違うのタスクを手動で完了しました。 オブジェクトが初期化すると、ペイロードを作成しており、リクエストが送信されます。 ここでの重要な違いは、すべての汚れたnusoapがやっている仕事をします。
必要('../ lib /にnusoap.phpの' ) ;
新しいクライアント= $するsoapclient ( " http://library.example.com/api/soap/wsdl/ " 、 true )を;
ここでは$クライアントオブジェクトが作成されます。 2つのオプションを作成するときには、利用可能な新しいするsoapclient :いずれかを指定することができ、このサービスを提供しwsdlファイル( 2番目のパラメータをtrueに設定すると) 、またはエンドポイントを指定するために、コール(および2番目のパラメータをfalseに設定します) 。 可能であるとき、私のようなwsdlファイルを使用する; nusoapモジュールを捕まえることができ、いくつかの方法で、お客様のミスをして、それを確実に異なる種類のすべてのリクエストへの正しいエンドポイントします。
パラメータドル=アレイ(
' devkey ' = > '123 ' 、
'アクション' = > "を検索' 、
'型' = > "本' 、
[キーワード] = > "スタイル'
) ;
伝送の準備のためのパラメータは少し従来の方法よりも簡単です。
ネームスペースドル= ' http://library.example.com ' ;
アクションドル= ' http://library.example.com/api/soap/search ' ;
$法= " searchrequest " ;
$結果= $クライアント>コール( $方法では、
アレイ( ' searchrequest ' = > $パラメータ)
$ネームスペース、 $アクション) ;
最後に、最後のいくつかのパラメータを設定しており、通話自体が作成されます。
soapリクエストを処理するからの応答が再び残りません。あまりにも違う似たような反応の両方が提供されるxmlフォーマットします。 せっけんの応答エンベロープおよびボディ運ぶの追加要素が、現在のデータを頻繁に似たような方法でこれらの要素内にします。 もちろん、いくつかの変動の間には、そこからの応答処理マニュアルnusoapからのリクエストとリクエストします。 ここでは、両方の方法を提示します。
物まねの出力を生成し、残りのリクエスト似たようなコードを使って、いくつかの変更をカプセル化するために使用されるスキームを石鹸します。
エコー"を検索対象: ( $のxml - >ボディ> librarysearchresponse - > - requestinfo >
キーワード) <br> " ;
エコー"ここではお客様のxml - ( $ >ボディ> librarysearchresponse - > - responseinfo > resultcount )
検索結果<br> " ;
foreach ( $ xmlで>体> librarysearchresponse - > - responseinfo >アイテムとしてアイテム& $ )
(
エコー" ( $アイテム- > ( $されるアイテムのタイトル) - > )著者<br> " ;
)
これは同一出力を生成し、残りのリクエストとして表示されています。 別の構文に注意して使用され、検索キーワードを取得します。 この時期に属性を取得することではありませんので、アクセスが異なっています。
オブジェクトにアクセスして提供されるnusoapはちょっと違うsimplexmlのメソッドに使用されたが、内部データ構造は非常によく似ている。 コードを変更して仕事をして数分しかかからないnusoapオブジェクトです。
エコー"を検索した: "します。
xmlの$ [ '体' ] [ ' librarysearchresponse ' ] [ ' requestinfo ' ] [ 'キーワード' ] 。 " <br> " ;
エコー"ここではお客様の
( $ xmlの[ '体' ] [ ' librarysearchresponse ' ] [ ' responseinfo ' ] [ ' resultcount ' ] )
検索結果<br> " ;
foreach ( $ xmlの[ '体' ] [ ' librarysearchresponse ' ] [ ' responseinfo ' ] [ 'アイテム' ]アイテムとして& $ )
(
エコー" ( $アイテム[ 'タイトル' ] ) ( $されるアイテム[ '著者' ] ) <br> " ;
)
nusoapでは、内部データへのアクセスと同じように多くの連想配列、というより、オブジェクト指向のための方法を使用する->子要素にアクセスし、さらにアレイの情報が含まれています。 この要素の出力は、前の例と同じにします。
せっけんの効果的な方法は、クエリのapiときに、追加のオーバーヘッドが許容します。 カプセル化して、すべての要素を簡単にできるように読んで、変数のスコープ内のリクエストです。 soapリクエストを作成することができたら同じように簡単に書き込みして、その鍵を交換するだけで変数です。 あるいは、それを達成することもできnusoapなどのツールを使用します。 せっけんにアクセスしてレスポンスを達成することができ、多くのと同じように、残りの反応は完了しましたときに、手動でリクエストします。 リクエストの場合、 nusoapを完了すると、アクセス方法は構造的に同じですが、いくつかの小さな変更をするだけで、構文使用されます。
Online: 536 users browsing the articles directory
|
|