【问题标题】:Does anyone know how to convert this Perl script into PHP?有谁知道如何将此 Perl 脚本转换为 PHP?
【发布时间】:2013-03-07 18:32:06
【问题描述】:

有人刚刚向我倾倒了一个 perl 脚本,现在这是我的问题。我对 Perl 一无所知。这是脚本。

#! /usr/bin/perl
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new;

my $req = POST 'http://www.someurl.com/aff/', [ search => 'www', errors => 0 ];

my $xml = "<?xml version='1.0' encoding='UTF-8' ?>
<data xmlns='https://www.aff.gov/affSchema' sysID='Adin'
rptTime='2010-06-07T14:10:30.758-07:00' version='2.23'>
<msgRequest to='Co' from='trt' msgType='Data Request' subject='Async'
dateTime='2010-06-07T14:10:30.758-07:00'>
<body>2010-06-07T14:50:06Z</body>
</msgRequest>
</data>";

$req->content( $xml );
my $username = "providedUserName";
my $password = "providedPW";

$req->authorization_basic($username, $password);

print $ua->request($req)->as_string;

据我所知,它正在创建一个 HTTP 请求对象,添加一些内容并打印响应。谷歌告诉我,我需要安装一个 Perl 包来获取 PHP 中的 HTTPRequest 对象,这不是一个选项。无论如何用 cURL 或 file_get_contents 或其他东西来做到这一点?

我会继续修补,但如果有人确切知道该怎么做,那么它至少可以节省我浪费我的时间。

【问题讨论】:

  • HttpRequest 包是一个 PECL 扩展,有时可用于 PHP5.3 安装。但是您也可以使用PEAR HTTP_Request2,它可以像大多数 PHP 类一样被解包和使用。甚至是 curl functions 用于发出 HTTP 请求。

标签: php perl http


【解决方案1】:

这是一个内容类型为“text/xml”的 HTTP POST 请求。我相信您可以使用 cURL 执行此操作,如下所示(示例改编自 http://www.infernodevelopment.com/curl-php-send-post-data-background,未经测试):

$x = curl_init("http://www.someurl.com/aff/");
curl_setopt($x, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($x, CURLOPT_HEADER, 0);
curl_setopt($x, CURLOPT_POST, 1);
curl_setopt($x, CURLOPT_RETURNTRANSFER, 1);

$xml = "<?xml version='1.0' encoding='UTF-8' ?>
  <data xmlns='https://www.aff.gov/affSchema' sysID='Adin'
    rptTime='2010-06-07T14:10:30.758-07:00' version='2.23'>
      <msgRequest to='Co' from='trt' msgType='Data Request' subject='Async'
        dateTime='2010-06-07T14:10:30.758-07:00'>
          <body>2010-06-07T14:50:06Z</body>
      </msgRequest>
  </data>";
curl_setopt($x, CURLOPT_POSTFIELDS, $xml);

$username = "providedUserName";
$password = "providedPW";
curl_setopt($x, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($x, CURLOPT_USERPWD, "$username:$password");

$data = curl_exec($x);

【讨论】:

  • CURLOPT_POSTFIELDS '此参数可以作为 urlencoded 字符串(如 'para1=val1&para2=val2&...')传递,也可以作为以字段名称为键、字段数据为值的数组传递。参考:php.net/manual/en/function.curl-setopt.php
  • 远远超出我的预期。你只是为我完成了我的工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多