从Microsoft Online Security Token Service(STS)获取安全令牌时遇到问题。它工作正常,我收到令牌,使用以下bash脚本:
curl -X POST -d @/var/www/extSTS.srf https://login.microsoftonline.com/extSTS.srf
但是当我尝试使用以下php脚本获取令牌时,我得到了一些“无效请求”。
$target_url = 'https://login.microsoftonline.com/extSTS.srf';
$data = '@/var/www/extSTS.srf';
$ch = curl_init($target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
echo $result;
php-script的结果:
<?xml version="1.0" encoding="utf-8" ?><S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:psf="http://schemas.microsoft.com/Passport/SoapServices/SOAPFault"><S:Body><S:Fault><S:Code><S:Value>S:Sender</S:Value><S:Subcode><S:Value>wst:InvalidRequest</S:Value></S:Subcode></S:Code><S:Reason><S:Text xml:lang="en-US">Invalid Request</S:Text></S:Reason><S:Detail><psf:error><psf:value>0x80048820</psf:value><psf:internalerror><psf:code>0x80045c01</psf:code><psf:text>Invalid STS request.
</psf:text></psf:internalerror></psf:error></S:Detail></S:Fault></S:Body></S:Envelope>
我的问题是bash-和php-scripts之间的区别是什么,他们为什么不发送相同的POST?
答案 0 :(得分:2)
使用:
$data = file_get_contents('/var/www/extSTS.srf');
而不是:
$data = '@/var/www/extSTS.srf';
后者只是设置一个字符串而不是实际加载想要的内容。
答案 1 :(得分:1)
从文件加载的'@'前缀是由curl命令行工具完成的魔术,而不是由libcurl的CURLOPT_POSTFIELDS选项完成。
因此,您需要自己阅读文件并将内容传递给选项。