2

XML を別のサーバーに POST するスクリプトを作成していますが、プラス記号 (+) に問題があります。これが私のコードです:

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;

my $XML = qq|
<?xml version="1.0" encoding="UTF-8"?>
<ServiceAddRQ>
<Service code="Ws%2BsuHG7Xqk01RaIxm2L/w1L">
<ContractList>
<Contract>
<Name>CGW-TODOSB2B</Name>
</Contract>
</ContractList>
</Service>
</ServiceAddRQ>
|;

utf8::encode($XML);


my $ua = LWP::UserAgent->new;
$ua->timeout(120);

my $ret = HTTP::Request->new('POST', $XMLurl);
$ret->content_type('application/x-www-form-urlencoded'); 
$ret->content("xml_request=$XML");

my $response = $ua->request($ret);

属性コードでわかるように、値の文字列には %2B があり、他のサーバーは値 "Ws+suHG7Xqk01RaIxm2L/w1L" を受け取ります。

%2B リテラルを送信するにはどうすればよいですか。

前もって感謝します

ウェルチ

4

3 に答える 3

4

次のように、コンテンツ内の安全でない文字をすべてエスケープする必要があります。

use URI::Escape;
$ret->content("xml_request=".uri_escape($XML));
于 2011-03-22T18:52:17.343 に答える
3

ドキュメントを正しく構成していませんapplication/x-www-form-urlencoded。それを正しく構築する最も簡単な方法は、HTTP::Request::CommonPOSTいずれかを直接使用することです

use HTTP::Request::Common qw( POST );
my $request = POST($XMLurl, [ xml_request => $XML ]);
my $response = $ua->request($request);

または間接的に

my $response = $ua->post($XMLurl, [ xml_request => $XML ]);

リクエストの本文は

Ws%252BsuHG7Xqk01RaIxm2L/w1L

それよりも

Ws%2BsuHG7Xqk01RaIxm2L/w1L

だからあなたはで終わるでしょう

Ws%2BsuHG7Xqk01RaIxm2L/w1L

それよりも

Ws+suHG7Xqk01RaIxm2L/w1L
于 2011-03-22T21:12:09.787 に答える
-1

補足として、「+」は URL エンコーディングを必要としないため、XML でエンコーディングする理由が明確ではありません。それはさておき

コンストラクターで HTTP::Request に事前にフォーマットされた文字列を渡すと、データには触れないと思います。

my $ret = HTTP::Request->new('POST', $XMLurl, undef, "xml_request=".$XML); 
于 2011-03-22T18:57:39.257 に答える