Отправка XML-файла содержит подпись gpg с помощью PHP cURL

#php #xml #curl #gnupg

#php #xml #curl #gnupg

Вопрос:

У меня есть XML-файл, и подпись GPG находится в нем, в <SIGNATURE> теге.

Вот xml:

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

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx

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

Когда я отправляю этот xml с помощью perl, ответ в порядке, и удаленный хост принимает подпись.

Но если я отправлю этот xml с помощью php и cURL, удаленный сервер отклонит подпись.

В 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);
  

Я предполагаю, что проблема с curl ….Возможно, пропущен параметр curl, но я не знаю, какой именно. Я пробовал urlencode , qoutemeta функции php для $xml строки, но безрезультатно.

Комментарии:

1. Я пытался отправить xml с помощью метода fsockopen, но результат тот же: удаленный сервер отклоняет подпись, так что это не проблема cURL.

Ответ №1:

Добавьте опцию user agent.
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);