ogestor/ipinfolaravel

这是官方的Laravel库,用于IPinfo,这是最可靠、最准确和最深入的数据来源。我们处理数以TB计的数据,以生成我们定制的IP地理定位、公司、运营商和IP类型数据集。请访问我们的开发者文档 https://ipinfo.io/developers。

6.0 2020-11-26 18:43 UTC

This package is auto-updated.

Last update: 2024-09-27 02:59:35 UTC


README

这是IPinfo.io IP地址API的官方Laravel客户端库,允许您查找自己的IP地址,或获取以下任一IP的详细信息:

  • IP地理定位(城市、地区、国家、邮政编码、纬度和经度)
  • ASN详细信息(ISP或网络运营商、相关域名和类型,如商业、托管或公司)
  • 公司信息(使用IP地址的企业的名称和域名)
  • 运营商详细信息(如果是仅用于移动流量的IP,则包括运营商名称、MNC和MCC)

在此检查我们为您IP地址拥有的所有数据。

入门指南

您需要一个IPinfo API访问令牌,您可以通过在https://ipinfo.io/signup免费注册账户来获取。

免费计划每月限制50,000次请求,并且不包括一些数据字段,如IP类型和公司数据。要启用所有数据字段和额外的请求量,请参阅https://ipinfo.io/pricing

安装

composer require ogestor/ipinfolaravel

打开您的应用程序的 \app\Http\Kernel.php 文件,并将以下内容添加到 Kernel::middleware 属性中

protected $middleware = [
  ...
  \ipinfo\ipinfolaravel\ipinfolaravel::class,
  ];

快速入门

Route::get('/', function (Request $request) {
    $location_text = "The IP address {$request->ipinfo->ip} is located in the city of {$request->ipinfo->city}."

    return view('index', ['location' => $location_text]);
});

将返回以下字符串到 index 视图

"The IP address 216.239.36.21 is located in the city of Emeryville."

身份验证

可以使用您的IPinfo API令牌对IPinfo库进行身份验证。它也可以在没有身份验证令牌的情况下工作,但功能更有限。要将访问令牌设置到您的应用程序中,请将以下内容添加到您的应用程序的 \config\services.php 文件中,并将 {{access_token}} 替换为您自己的令牌

'ipinfo' => [
      'access_token' => {{access_token}},
  ],

为了更安全地这样做并避免将密钥放入代码库中,创建一个 IPINFO_SECRET(或类似的)环境变量,并在 \config\services.php 中访问此值,如下所示

'ipinfo' => [
      'access_token' => env('IPINFO_SECRET'),
  ],

详细信息数据

$request->ipinfo 是一个 Details 对象,它包含所有列出的字段 IPinfo开发者文档,以及一些小的补充。属性可以直接访问。

>>> $request->ipinfo->hostname
cpe-104-175-221-247.socal.res.rr.com

国家名称

$request->ipinfo->country_name 将返回国家名称,如由 countries.json 文件提供。有关使用非英语语言更改此文件的说明,请参见下文。 $request->ipinfo->country 仍将返回国家代码。

>>> $request->ipinfo->country
US
>>> $request->ipinfo->country_name
United States

访问所有属性

$request->ipinfo->all 将以数组形式返回所有详细信息数据。

>>> $request->ipinfo->all
{
'asn': {  'asn': 'AS20001',
           'domain': 'twcable.com',
           'name': 'Time Warner Cable Internet LLC',
           'route': '104.172.0.0/14',
           'type': 'isp'},
'city': 'Los Angeles',
'company': {   'domain': 'twcable.com',
               'name': 'Time Warner Cable Internet LLC',
               'type': 'isp'},
'country': 'US',
'country_name': 'United States',
'hostname': 'cpe-104-175-221-247.socal.res.rr.com',
'ip': '104.175.221.247',
'ip_address': IPv4Address('104.175.221.247'),
'loc': '34.0293,-118.3570',
'latitude': '34.0293',
'longitude': '-118.3570',
'phone': '323',
'postal': '90016',
'region': 'California'
}

缓存

默认情况下,Laravel 的基于文件的缓存提供了 Details 数据的内存缓存。已向默认的 TTL(存活时间)添加了 LRU(最近最少使用)缓存失效功能。这意味着值将被缓存指定的时间;如果缓存的最大大小达到限制,则根据需要失效缓存值,从最老的缓存值开始。

修改缓存选项

可以通过在 $settings 参数数组中设置值来更改默认的缓存 TTL 和最大大小。

  • 默认最大缓存大小:4096(推荐使用 2 的倍数以提高效率)
  • 默认 TTL:24 小时(以分钟为单位)
'ipinfo' => [
    'cache_maxsize' => {{cache_maxsize}},
    'cache_ttl' => {{cache_ttl}},
],

使用不同的缓存

可以通过创建 CacheInterface 类的子类,并在 \config\services.php 中设置 cache 配置值来使用自定义缓存。注意,这被称为 策略模式

'ipinfo' => [
    ...
    'cache' => new MyCustomCacheObject(),
],

国际化

当查找 IP 地址时,响应对象包括一个 $request->ipinfo->country_name 属性,其中包含基于美式英语的国家名称。可以通过告诉库从自定义文件中读取来以其他语言返回国家名称。要定义自定义文件,请将以下内容添加到您的应用程序的 \config\services.php 文件中,并用您的文件路径替换 {{countries}}

'ipinfo' => [
    ...
    'countries_file' => {{countries}},
],

文件必须是一个具有以下结构的 .json 文件

{
 {{country_code}}: {{country_name}},
 "BD": "Bangladesh",
 "BE": "Belgium",
 "BF": "Burkina Faso",
 "BG": "Bulgaria"
 ...
}

过滤

默认情况下,ipinfolaravel 过滤掉包含 botspider 的用户代理的请求。对于这些请求,不会查找 IP 地址数据,而是将 $request->ipinfo 属性设置为 null。这是为了避免您在非用户流量上不必要地使用请求。此行为可以通过将以下内容添加到您的应用程序的 \config\services.php 文件中关闭。

'ipinfo' => [
      ...
      'filter' => false,
 ],

要设置自己的过滤规则,从而替换默认的过滤器,可以将 ipinfo.config 设置为您自己的、满足以下规则的、自定义的可调用函数

  • 接受一个请求。
  • 返回 True 以过滤,False 以允许查找

要使用您自己的过滤器函数

'ipinfo' => [
      ...
      'filter' => $customFilterFunction,
],

其他库

为许多语言提供官方的 IPinfo 客户端库,包括 PHP、Python、Go、Java、Ruby,以及许多流行的框架,如 Django、Rails 和 Laravel。还有许多第三方库和 API 的集成可用。

关于 IPinfo

成立于 2013 年,IPinfo 以成为任何地方最可靠、最准确和最深入的 IP 地址数据来源而自豪。我们处理数万亿数据来生成我们定制的 IP 地理位置数据、公司、运营商、VPN 检测、托管域名和 IP 类型数据集。我们的 API 每月处理超过 200 亿次请求,为 10 万家企业和开发者提供服务。

image