无法将Curl输出转换为JSON

Time for a second set of eyes. I've been looping on this for awhile. The url http://freegeoip.net/json/ appears to return JSON. I can't seem to decode or parse it. Any help would be greatly appreciated. Code follows:

    <?php

    //////////////////////////////////////////////////////////////////////
    //  Debug options
    //////////////////////////////////////////////////////////////////////
     error_reporting(E_ALL);
     error_reporting(E_ALL | E_STRICT);
     ini_set('display_errors', 1);

    function get_ip_address()
    {
        foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) {
        if (array_key_exists($key, $_SERVER) === true) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
            if (filter_var($ip, FILTER_VALIDATE_IP) !== false) {
                return $ip;
            }
            }
        }
        }
    }

    $myIP = get_ip_address();

    $url = "http://freegeoip.net/json/" . $myIP;
    $cURL = curl_init();
    curl_setopt($cURL, CURLOPT_URL, $url);
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($cURL, CURLOPT_HTTPGET, true);
    curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Accept: application/json'
    ));

    $result = curl_exec($cURL);
    $myArray = json_decode($result);

    curl_close($cURL);

    //////////////////////////////////////////////////////////////////////
    //  Debug  
    //////////////////////////////////////////////////////////////////////
     echo $myArray->region_code . "<br />";
     echo $myArray->region_name . "<br />";
     echo $myArray->city . "<br />";
     echo $myArray->zip_code . "<br />";
     echo $myArray->time_zone . "<br />";
     echo $myArray->latitude . "<br />";
     echo $myArray->longitude . "<br />";
     echo $myArray->metro_code . "<br />";
duanbing6955
duanbing6955 我把我的IP交叉了。它没有阻止$myIP,但它似乎阻止了CURL请求源的IP。我认为你把它钉在了兰德尔身上。
接近 3 年之前 回复
dongle7882
dongle7882 我发现,如果我删除$myIP,它会以正确的形式从东边返回一组通用值。但是,使用我的手机(不在WIFI上)它会阻止它。
接近 3 年之前 回复
douhuo1738
douhuo1738 它实际上是从您展示的转储声音......他们通过首先想要验证来阻止自动脚本(也称为bot)。您可能必须将自己列入白名单(查看其主页以获取联系信息),或者托管您自己的节点以在本地使用它。无论哪种情况,无论出于何种原因,他们显然都在阻挡你:(
接近 3 年之前 回复
doxp30826
doxp30826 兰德尔,我怎么能检查我的配额?这是有道理的,特别是如果代码适合你。
接近 3 年之前 回复
dongpo9071
dongpo9071 $result,false没有变化。据我所知,在过去的几天里我去过那里不超过100次。
接近 3 年之前 回复
dongxianglun5163
dongxianglun5163 后续代码var_dump($结果);收益率:字符串(5577)“请启用cookie。还有一步请完成安全检查以访问freegeoip.net为什么我必须完成验证码?
接近 3 年之前 回复
dongxing7530
dongxing7530 嗯。你的服务器多少次点击它的服务器?它可能很简单,因为它们现在将您的服务器IP列入黑名单:“默认情况下,您每小时最多允许15,000个查询。达到此限制后,所有请求都将导致HTTP403被禁止,直到您的配额为止被清除了。“
接近 3 年之前 回复
duanfangfei5558
duanfangfei5558 尝试json_decode($result,false);看它是否会强制它进入一个对象,它应该返回一个对象,但它可能是一个设置
接近 3 年之前 回复
doubaben7394
doubaben7394 我昨天上班了!现在它没有返回一个对象。兰德尔,谢谢你的努力。
接近 3 年之前 回复
douliwang6896
douliwang6896 这表明你的json_decode()失败了,这表明你的$result不包含JSON。var_dump()来检查它。
接近 3 年之前 回复
dtoqa66028
dtoqa66028 我至少在寻找它返回美国的国家。它似乎是在最后一行的$myArray调用中得到“非对象”。
接近 3 年之前 回复
dongyi1748
dongyi1748 我将您的整个代码粘贴到我服务器上的测试脚本中,并按预期工作。调试行输出,我得到有关我的IP的结果。
接近 3 年之前 回复
duan111112
duan111112 “我似乎无法解码或解析它。”你需要变得不那么模糊。你看到了什么错误?你期待什么输出?你得到什么输出?
接近 3 年之前 回复
dongpan8439
dongpan8439 你确定你的卷发有效吗?您是否尝试将$result转储出来以查看其中包含的内容?可能是它是空的,这会将你的搜索方式转移到某种方式。
接近 3 年之前 回复

1个回答



编辑:删除答案。</ p>

我把代码放入我的服务器,它完全正常 对我来说。</ p>

他的服务器上是否禁用了curl?</ p>
</ div>

展开原文

原文

Edit : Removed answer.

I put the code into my server and it works perfectly fine for me.

Maybe curl is disabled on his server?

dongpu2476
dongpu2476 大声笑,不,我没有学到新的东西
接近 3 年之前 回复
dongxun1142
dongxun1142 你确实意识到拥有或不会对php脚本的执行产生零差别,对吧? php.net/manual/en/language.basic-syntax.phptags.php
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐