2011-11-11 62 views
2

我有一個xml文件和一個GPG簽名,它位於<SIGNATURE>標記中。發送XML文件包含使用PHP + cURL的gpg簽名

這裏是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腳本中使用:

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

我想有一個與捲曲問題....可能是一個捲曲設置:use URI(); use GnuPG qw(:algo); use LWP::UserAgent(); use IO::Socket::SSL;

下一頁捲曲選項在PHP腳本設置錯過了,但我不知道是哪一個。我試過urlencode,qoutemeta php函數爲$xml字符串,但沒有結果。

+0

我試着用fsockopen方法發送xml,但結果是一樣的:遠程服務器關閉簽名,所以它不是捲曲問題。 – user1041503

回答

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