0

我一直在寻找关于如何解决 php 代码中这个常见错误的正确答案:failed to open stream: HTTP request failed!我真的认为解决方案在于重写代码以绕过代码中的User-Agenthttp 标头。我需要访问的文件与此代码位于同一台服务器上。我需要有关如何重写此脚本的功能部分的帮助:

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;
    }
}
?>
4

2 回答 2

0

来自 file_get_content 手册页:

注意:如果您要打开带有特殊字符(例如空格)的 URI,则需要使用 urlencode() 对 URI 进行编码。

因此,请尝试对您的查询参数进行 urlencode 之前。此外,我建议使用curl从互联网 url 获取文档

于 2013-02-19T14:16:44.290 回答
0

嗯,当我向这些 URL 发出请求时,我收到 403 Forbidden 响应。会是这样吗?

如果没有,您似乎没有测试 runapp() 函数参数是否具有非空值。它们可能是空字符串。如果您执行一些值为空的请求会发生什么?你会得到格式错误的查询参数。

简而言之:您应该检查参数的长度或 !empty 或类似的,并且仅在设置了它们时将它们附加到查询字符串中。

于 2013-02-19T14:21:35.447 回答