'&安培;'成为'&'当试图从URL获取内容时

时间:2013-06-11 09:11:48

标签: php html apache nginx

我使用相同的算法运行我的WebServer几个月,我使用这行代码获取了URL的内容:

$response = file_get_contents('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=100&user=test&pw=test

但现在我的nginx日志中出现错误,说我请求了以下返回403的URL

http://femoso.de:8019/api/2/getVendorLogin?vendor=100&user=test&pw=test

我知道目标服务器上发生了一些变化,但我认为这不应该影响我吗?!

我已经花了数小时阅读和搜索Google和Stackoverflow,但所有建议的方式都是

urlencode()或 htmlspecialchars()等...

对我不起作用。

为了您的信息,环境是一个zend应用程序,在我的端部有一个nginx服务器,另一端有一个带有apache的php webservice。

就像我说的那样,它在我身边没有任何改变而改变了!

由于

3 个答案:

答案 0 :(得分:1)

让我们找出罪魁祸首!


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)也许尝试和play一点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;

答案 1 :(得分:1)

听起来您的arg_separator.output在php.ini中设置为"&"。对该行进行注释或更改为"&"

答案 2 :(得分:0)

我不是专家,但这是计算机读取地址的方式,因为它是一个特殊字符。有编码的东西。简单的解决方法是使用str_replace()进行过滤。这些方面的东西。