Как я могу отправить HTTPS-запрос в Perl без LWP :: UserAgent или HTTP :: Request? - PullRequest
0 голосов
/ 04 августа 2009

Мне нужно отправить HTTPS-запрос без использования LWP :: UserAgent или HTTP :: request? Каков еще один способ сделать это? Это запрос, который мне нужно отправить:

POST https://payflowpro.paypal.com/
Connection: close
Host: payflowpro.paypal.com
Content-Length: 181
Content-Type: text/namevalue
X-VPS-CLIENT-TIMEOUT: 30
X-VPS-REQUEST-ID: 1249403513SNOID
X-VPS-VIT-INTEGRATION-PRODUCT: Product
X-VPS-VIT-INTEGRATION-VERSION: 4.0
X-VPS-VIT-OS-NAME: linux
X-VPS-VIT-OS-VERSION: 2.6.16-gentoo-r13
X-VPS-VIT-RUNTIME-VERSION: 5.008007

EXPDATE[4]=1011&AMT[6]=100.01&ACCT[16]=4111111111111111&TENDER[1]=C&TAXAMT[4]=0.00&PARTNER[8]=******&PWD[9]=******&VENDOR[6]=******&USER[6]=******&TRXTYPE[1]=S&VERBOSITY=MEDIUM

Ответы [ 4 ]

8 голосов
/ 04 августа 2009

Вы ищете README.SSL ?

Поддержка шифрования получается через использование Crypt :: SSLeay или IO :: Socket :: SSL , который может быть найдено из CPAN. В то время как libwww-perl имеет поддержка "plug-and-play" для обоих эти модули (по состоянию на v5.45), Рекомендуемый модуль для использования Crypt :: SSLeay .

5 голосов
/ 04 августа 2009

Найдите библиотеку SSL и самостоятельно откройте сокет, затем отправьте данные.

Я бы рекомендовал против этого, хотя. Гораздо лучше сделать это правильно с помощью одного из упомянутых вами модулей, указав в модуле правильные параметры, чтобы он выполнял ваш запрос.

1 голос
/ 04 августа 2009

Благодаря справочному пакету от Sinan Ünür я смог выполнить то, что мне было нужно:

my $host = 'pilot-payflowpro.paypal.com';
my $port = 443;
my $sock = IO::Socket::SSL->new("$host:$port") || die $!;

my $req = 'EXPDATE[4]=1011&AMT[6]=100.01&ACCT[16]=4111111111111111&TENDER[1]=C&TAXAMT[4]=0.00&PARTNER[8]=*****&PWD[9]=******&VENDOR[6]=*****&USER[6]=******&TRXTYPE[1]=S&VERBOSITY=MEDIUM';

print $sock "POST https://$host/ HTTPS/1.1\r\n";
print $sock "Connection: close", "\r\n";
print $sock "Host: ", $host, "\r\n";
print $sock "Content-length: ", length $req, "\r\n";
print $sock "Content-type: text/namevalue\r\n";
print $sock "X-VPS-CLIENT-TIMEOUT: 30", "\r\n";
print $sock "X-VPS-REQUEST-ID: 1249403513SNOID", "\r\n";
print $sock "X-VPS-VIT-INTEGRATION-PRODUCT: Product", "\r\n";
print $sock "X-VPS-VIT-INTEGRATION-VERSION: 4.0", "\r\n";
print $sock "X-VPS-VIT-OS-NAME: linux", "\r\n";
print $sock "X-VPS-VIT-OS-VERSION: 2.6.16-gentoo-r13", "\r\n";
print $sock "X-VPS-VIT-RUNTIME-VERSION: 5.008007", "\r\n\r\n";
print $sock $req, "\r\n\r\n";

print while <$sock>;

close $sock;
0 голосов
/ 04 августа 2009

Я не уверен, что разумно давать нам свой идентификатор PayPal-запроса и другие данные ... Точные данные, отправляемые на сервер, на самом деле не имеют значения; более важным является тип ошибки, которую вы получаете, когда используете LWP :: UserAgent. В предыдущем вопросе вы указали, что получаете ошибки HTTP 500, что говорит о том, что с получателем что-то не так, или вы отправляете данные, которые отклоняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...