我用相同的algorithm运行我的WebServer几个月,在那里我通过使用这一行代码得到了一个URL的内容:
$response = file_get_contents('http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw),'','&'));
但现在突然停止工作,现在一定有了变化。
在早些时候,URL看起来应该是:
http://femoso.de:8019/api/2/getVendorLogin?vendor=100&user=test&pw=test
但现在我在我的nginx日志中得到一个错误,说我要求下面的URL返回403
http://femoso.de:8019/api/2/getVendorLogin?vendor=100&user=test&pw=test
我知道在目标服务器上发生了一些变化,但我认为这不应该影响到我?
我已经花了几个小时的阅读和search谷歌和Stackoverflow,但所有build议的方式为
urlencode()或htmlspecialchars()等…
没有为我工作。
为了您的信息,该环境是一个zend应用程序,在我的一端有一个nginx服务器,在另一端有一个带有apache的php webservice。
就像我说的那样,我的身边没有任何改变!
谢谢
让我们找出罪魁祸首!
1)它是http_build_query
? 尝试更换:
'http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw)
有:
"http://femoso.de:8019/api/2/getVendorLogin?vendor={$vendor}&user={$login}&pw={$pw}"
2)是否在某种地方进行后期处理? 尝试用chr(38)
替换'&'
3)也许尝试和cURL 玩一点点?
$ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => 'http://femoso.de:8019/api/2/getVendorLogin?' . http_build_query(array('vendor'=>$vendor,'user'=>$login,'pw'=>$pw), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, // include response header in result //CURLOPT_FOLLOWLOCATION => true, // uncomment to follow redirects CURLINFO_HEADER_OUT => true, // track request header, see var_dump below )); $data = curl_exec($ch); curl_close($ch); var_dump($data, curl_getinfo($ch, CURLINFO_HEADER_OUT)); exit;
听起来像你的arg_separator.output
被设置为"&"
在你的php.ini。 要么发表意见,要么更改为"&"
我不是专家,但这是计算机读取地址的方式,因为它是一个特殊字符。 与编码的东西。 简单的修复就是通过利用str_replace()进行过滤。 沿着这些线的东西。