3

我用相同的算法运行了我的 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

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

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

urlencode() 或 htmlspecialchars() 等...

对我不起作用。

供您参考,环境是一个 zend 应用程序,我的一端有一个 nginx 服务器,另一端有一个带有 apache 的 php webservice。

就像我说的,它改变了,我这边没有任何改变!

谢谢

4

3 回答 3

1

听起来你arg_separator.output的设置"&"在你的 php.ini 中。评论该行或更改为"&"

于 2014-08-04T17:50:37.773 回答
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)也许尝试一下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;
于 2013-06-11T09:42:58.340 回答
0

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

于 2013-06-11T09:16:07.110 回答