前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何通过IP地址获取用户所在城市?

如何通过IP地址获取用户所在城市?

作者头像
申霖
发布2019-12-27 17:52:04
2.7K0
发布2019-12-27 17:52:04
举报
文章被收录于专栏:小白程序猿小白程序猿

在日常开发过程中,经常有通过IP去获取用户位置,或在服务器日志中查看到各种各样的ip地址,如何通过ip地址去获取用户的信息呢?比如所在城市,网络提供商是联通,移动,电信呢,通过接口我们可以实现这些功能。

IP地址
IP地址

一、前言

使用聚合数据的ip接口实现功能,thinkphp框架在3.2版本中有ip定位功能,至于3.2之前的版本就不清楚了,没用过,哈哈~~~~,为啥使用聚合数据的呢,有两个点吧,一接口完全免费,二接口代码明了简洁。接口需要appkey,到聚合官网自行申请。

二、接口示例

演示地址:https://www.shenlin.ink/open/tool/index.html

三、代码

1、控制器代码

代码语言:javascript
复制
<?php
/**
 * Created by PhpStorm.
 * User: 申霖
 * Date: 2019/7/25 0025
 * Time: 下午 6:18
 */
namespace app\api\controller;

use think\Controller;

class Tool extends Controller
{
    /**
     * view
     * @return \think\response\View
     * @author 申霖
     * @time 2019/7/25 0025 下午 7:08
     */
    public function index()
    {
        return view('tool/index');
    }
    /**
     * ip地址查询
     * @return \think\response\Json|\think\response\View
     * @author 申霖
     * @time 2019/7/25 0025 下午 6:37
     */
    public function ip()
    {
        $ip = input('post.ip');
        if($ip) {
            header('Content-type:text/html;charset=utf-8');
            //配置您申请的appkey
            $appkey = "ef25bc7b023de945d316b6a5*****";
            //************1.根据IP/域名查询地址************
            $url         = "http://apis.juhe.cn/ip/ip2addr";
            $params      = [
                "ip"    => $ip,//需要查询的IP地址或域名
                "key"   => $appkey,//应用APPKEY(应用详细页查询)
                "dtype" => "json",//返回数据的格式,xml或json,默认json
            ];
            $paramString = http_build_query($params);
            $content     = $this->juheCurl($url, $paramString);
            $result      = json_decode($content, true);
            if($result) {
                            if($result['error_code'] == '0') {
                                return json([
                                    'code' => 200,
                                    'msg' => 'success',
                                    'data' => $result['result']
                                ]);
                            } else {
                                return json([ 
                                    'code' => $result['error_code'],
                                    'msg' => $result['reason'],
                                    'data' => '' 
                                ]);
                            }
                        } else {
                            return json([ 'code' => 101, 'msg' => '请求失败', 'data' => '' ]);
                        }
        } else {
            return json(['code'=>100,'msg'=>'请输入IP']);
        }
    }

    /**
     *  请求接口返回内容
     * @param $url
     * @param bool $params
     * @param int $ispost
     * @return bool|mixed
     */
    public  function juheCurl($url, $params = false, $isPost = 0)
    {
        $httpInfo = [];
        $ch       = curl_init();

        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'JuheData');
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        if($isPost) {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
            curl_setopt($ch, CURLOPT_URL, $url);
        } else {
            if($params) {
                curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
            } else {
                curl_setopt($ch, CURLOPT_URL, $url);
            }
        }
        $response = curl_exec($ch);
        if($response === FALSE) {
            //echo "cURL Error: " . curl_error($ch);
            return false;
        }
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $httpInfo = array_merge($httpInfo, curl_getinfo($ch));
        curl_close($ch);
        return $response;
    }
}

2、视图代码

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>IP地址查询</title>
    <meta name="keywords" content="IP,地址,查询">
    <meta name="description" content="IP地址查询">
    <link rel="icon" href="https://www.shenlin.ink/favicon.ico" type="image/x-icon"/>
    <link rel="stylesheet" href="/blog/css/layui.css">
    <style>
         .layui-form-item .layui-input-inline {
        width: 100%;
          }
           .layui-form {
        padding-top: 130px;
               width: 60%;
               margin: 0 auto;
               height: 100px;
         }

     .layui-btn {
        width: 100%;
         }
    </style>
</head>
<body>
<div class="layui-container">
    <form class="layui-form">
        <div class="layui-form-item">
            <div class="layui-input-inline">
                <input placeholder="请填写IP" name="ip" required lay-verify="required"
 class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-input-inline">
                <button class="layui-btn" lay-submit lay-filter="*">立即提交</button>
            </div>
        </div>
    </form>
</div>
<script src="/blog/jquery-2.1.4.min.js"></script>
<script src="/blog/layui.js"></script>
<script>
 layui.use(['layer', 'form'], function () {
      var form = layui.form, layer = layui.layer;
         form.on('submit(*)', function (data) {
        $.ajax({
            type: 'post',
                     url: '/open/tool/ip.html',
                     data: data.field,
                     async: false,
                     dataType: "json",
                     success: function (data) {
               if (data.code === 200) {
                 layer.open({
                    title: data.msg,
                                       content: "<p>地区:"
                                        + data.data.area + 
                                        "</p><p>服务商:" 
                                        + data.data.location + 
                                        "</p>"
                                   })
               } else {
                  layer.msg(data.data);
                             }
            },
                        error: function () {
               layer.msg("接口错误");
                       }
         });
             return false;
         });
     });
</script>
</body>
</html>

Html代码看起来永远是那么乱的~~~~~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档