'&'变成'&' 当试图从URL获取内容

我用相同的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()进行过滤。 沿着这些线的东西。