6

Perl を使用SOAP::Liteして、WSDL で定義されたリモート Web サービスにアクセスしています。それは私が持っていることを意味します:

use strict;
use Data::Dumper;
use SOAP::Lite +trace => 'debug';

my $service = SOAP::Lite->service('http://path/wsdl');

わかりました。問題は、HTTP::Requestカスタム HTTP 要求ヘッダーに沿って送信するためにオブジェクトにアクセスする必要があることです (認証ヘッダーについて話しているわけではありません)。呼び出しが成功した後、リクエスト オブジェクトにアクセスできるようです。

my $result = $service->getClient('parameters');
print Dumper($service->transport->http_request);

それは私に正しいHTTP::Requestオブジェクトを与えるでしょう:

$VAR1 = bless( {
             '_content' => '',
             '_uri' => undef,
             '_headers' => bless( {}, 'HTTP::Headers' ),
             '_method' => undef
           }, 'HTTP::Request' );

autoDispatch ($service->getClientパーツ) を実行する前にリクエスト オブジェクトにアクセスしようとすると、トランスポート オブジェクトが空になり、リクエストを変更する方法がありません。このまま行けばすべてうまくいくように思えますがSOAP::Lite->proxy、それでは事前定義されたサービス定義の有用性が失われます。

最初に呼び出しを行うことなく、サービス定義からリクエストオブジェクトにアクセスする方法はありますか? 鶏と卵の問題は本当に...

ありがとう!

4

2 に答える 2

1

私が達成しようとしているのは、サービス呼び出しを行う前にトランスポートを設定することです。

そして、トランスポートは空ではないため、適切なハンドラーを追加することで正確にそれを行います

于 2011-08-16T06:14:27.590 に答える
0

ハンドラーをトランスポートに追加します。たとえば、LWP::Debug を参照してください。ドキュメントについては LWP::UserAgent を参照してください。たとえば、perlmonks.org/?node_id=904166 を参照してください。

于 2011-08-13T20:56:30.633 に答える