我一直在寻找如何修复php代码中常见错误的正确答案:failed to open stream: HTTP request failed!
我真的认为解决方案在于重写代码以绕过代码中的User-Agent
http头。我需要访问的文件与此代码位于同一服务器上。我需要关于如何重写这个脚本的功能部分的帮助:
function runapp($dir,$latdeg,$latmin,$latsec,$longdeg,$longmin,$longsec)
{
global $_english;
$query= ($_english ? 'http://esnig.org/cgi-bin/ntv2_geo2_e.cgi' : 'http://esnig.org/cgi-bin/ntv2_geo2_f.cgi').
'?' . PAR_DIR .'=' . $dir .
'&' . PAR_LATDEG .'=' . $latdeg .
'&' . PAR_LATMIN .'=' . $latmin .
'&' . PAR_LATSEC .'=' . $latsec .
'&' . PAR_LONGDEG .'=' . $longdeg .
'&' . PAR_LONGMIN .'=' . $longmin .
'&' . PAR_LONGSEC .'=' . $longsec;
$response=file($query);
foreach ($response as $value)
{
echo $value;
}
}
?>
来自file_get_content手册页面:
注意:如果您要打开一个带有特殊字符(如空格)的URI,您需要使用urlencode()对URI进行编码。
因此,请尝试在之前对查询参数进行url编码。此外,我建议使用curl从互联网url 获取文档
嗯,当我对这些URL进行请求时,我会得到403 Forbidden响应。会是这样吗?
如果没有,那么您似乎没有测试runapp()函数params是否具有非空值。它们可能是空字符串。如果在某些值为空的情况下执行请求,会发生什么情况?您会得到格式错误的查询参数。
简而言之:你应该检查你的参数的长度或!为空或诸如此类,并且仅在设置了它们的情况下将它们附加到查询字符串中。