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