3

ここに私のジレンマがあります: Web フォームに記入し、LWP::UserAgent を使用してそのフォームから結果を取得しようとしています。これが私のコードの例です:

#!/usr/bin/perl -w

use strict;
use LWP;
use HTTP::Request::Common;
use LWP::Debug qw(+);

my $ua = LWP::UserAgent->new(protocols_allowed=>["https"]);

my $req = POST 'https://their.securesite.com/index.php',
[ 'firstName'                   => 'Me',
  'lastName'                    => 'Testing',
  'addressLine1'                => '123 Main Street',
  'addressLine2'                => '',
  'city'                        => 'Anyplace',
  'state'                       => 'MN',
  'zipCode'                     => '55555',
  'card'                        => 'visa',
  'cardNumber'                  => '41111111111111111',
  'ccv2'                        => '123',
  'exp_month'                   => '07',
  'exp_year'                    => '2015',
  'shared_key'                  => 'hellos',
];

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

print $response->is_success() . "\n";
print $response->status_line . "\n";
print $response->content . "\n";

これを実行すると、200 OK と成功の "1" が返されますが、フォームからの応答ページは返されません。終了タグのみ:

</body>
</html>

これは、フォーム ページと応答ページの URL が同じであることが原因でしょうか? 私は LWP を初めて使用するので、ここでストローをつかんでいます。それはまだクライアント側にあるかもしれませんが、私側の問題も除外したいと思います.

皆さんが与えることができる助けを前もって感謝します-私はグーグルアウトされています。

4

3 に答える 3

1

Use $response->decoded_content to get the content without the headers. See HTTP::Message for more information.

#!/usr/bin/perl -w

use strict;

use URI;
use LWP::UserAgent;
use HTTP::Request;

my $url = URI->new('https://their.securesite.com/index.php');
my $ua = LWP::UserAgent->new();

my $request = HTTP::Request->new(
    'POST',
    $url,
    HTTP::Headers->new(
        'User-Agent'  =>  "perl ua/ v0.001",
        'Accept'    =>  "text/xml, multipart/*, application/soap"
    ),
    [ 'firstName'                   => 'Me',
      'lastName'                    => 'Testing',
      'addressLine1'                => '123 Main Street',
      'addressLine2'                => '',
      'city'                        => 'Anyplace',
      'state'                       => 'MN',
      'zipCode'                     => '55555',
      'card'                        => 'visa',
      'cardNumber'                  => '41111111111111111',
      'ccv2'                        => '123',
      'exp_month'                   => '07',
      'exp_year'                    => '2015',
      'shared_key'                  => 'hellos',
     ]  
) or die "Error initiating Request: $@\n";

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

if ($response->is_success) {
     print $response->decoded_content, "\n";
} else {
    die $response->status_line;
}
于 2015-04-06T21:02:11.030 に答える
1

Mojo::UserAgent (ツールのMojoliciousスイートの一部)を使用できる場合、コードは次のようになります。HTTPS を使用するには、IO::Socket::SSL が必要になる場合があることに注意してください。

#!/usr/bin/env perl

use strict;
use warnings;

use Mojo::UserAgent;

my $ua = Mojo::UserAgent->new;

my $tx = $ua->post('https://their.securesite.com/index.php', form => 
{ 'firstName'                   => 'Me',
  'lastName'                    => 'Testing',
  'addressLine1'                => '123 Main Street',
  'addressLine2'                => '',
  'city'                        => 'Anyplace',
  'state'                       => 'MN',
  'zipCode'                     => '55555',
  'card'                        => 'visa',
  'cardNumber'                  => '41111111111111111',
  'ccv2'                        => '123',
  'exp_month'                   => '07',
  'exp_year'                    => '2015',
  'shared_key'                  => 'hellos',
});

if ( $tx->success ) {
  print $tx->res->body;
  # or work with the resulting DOM
  # my $dom = $tx->res->dom;
} else {
  my ($err, $code) = $tx->error;
  print $code ? "$code response: $err\n" : "Connection error: $err\n";
}

インターフェイスは少し異なりますが、応答 HTML を解析するためのMojo::DOM統合など、多くの優れた機能があります。

于 2013-05-30T22:46:27.547 に答える
0

$response->as_string の値を確認してください

ヘッダー付きの完全な http 応答が表示されます

于 2013-05-30T21:51:38.530 に答える