发送XML文件包含带有PHP + cURL的gpg签名

时间:2011-11-11 10:58:11

标签: php xml curl gnupg

我在<SIGNATURE>标记中有一个xml文件,其中包含一个GPG签名。

这是xml:

$xml = "<DATA>
 ....
  <SIGNATURE>-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx

-----END PGP SIGNATURE-----
  </SIGNATURE>
</DATA>";

当我使用perl发送此xml时,响应正常,远程主机接受签名。

但是如果我用php和cURL发送这个xml,远程服务器将解除签名。

下一个模块用于perl脚本:use URI (); use GnuPG qw( :algo ); use LWP::UserAgent (); use IO::Socket::SSL;

下一个cURL选项在php脚本中设置:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);

我猜卷曲有问题......可能错过了卷曲设置,但我不知道哪个。我为urlencode字符串尝试了qoutemeta$xml个php函数,但没有结果。

1 个答案:

答案 0 :(得分:0)

添加用户代理选项     curl_setopt($ ch,CURLOPT_USERAGENT,“Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1)Gecko / 2008070206 Firefox / 3.0.1”);
    curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($ ch,CURLOPT_URL,$ url);
    curl_setopt($ ch,CURLOPT_POST,1);
    curl_setopt($ ch,CURLOPT_POSTFIELDS,$ xml);
    curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);