【发布时间】:2013-06-07 02:01:24
【问题描述】:
我使用相同的算法运行我的 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
我知道目标服务器上发生了一些变化,但我认为这不应该影响我吗?!
我已经花费了数小时阅读和搜索 Google 和 Stackoverflow,但所有建议的方法都是
urlencode() 或 htmlspecialchars() 等...
对我没用。
为了您的信息,环境是一个 zend 应用程序,我的一端有一个 nginx 服务器,另一端有一个 php webservice 和 apache。
就像我说的,它改变了,我这边没有任何改变!
谢谢
【问题讨论】:
-
有趣。更改 arg_separator(
http_build_query的第三个参数)对生成的 url 有影响吗? -
如果我将 arg_seperator 更改为 '&'例如,我使用 &user 等获取 URL ...
-
这表明某处正在进行一些后期处理。也许有一个整洁的输出缓冲区改变了 url。出于好奇,生成的 HTML 是显示实体还是只有 nginx 告诉你?
-
我对后期处理也有同样的感觉,但由于我没有改变任何东西,我认为这可能是远程服务器的问题?! nginx 告诉我我请求了这个错误的 url,并说它返回了 403 导致 php 错误
-
@Evils,您的服务器当前运行的是什么 PHP 版本?
arg_separator参数已在 5.1.2 中添加。不过,(意外)降级的可能性不大..