我使用相同的算法运行我的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。
就像我说的那样,它在我身边没有任何改变而改变了!
由于
答案 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()进行过滤。这些方面的东西。