ipinfo/ipinfolaravel

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

v2.6.0 2023-07-31 07:26 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 ipinfo/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}.";
    return view('index', ['location' => $location_text]);
});

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

"The IP address 127.0.0.1."

身份验证

IPinfo 库可以使用您的 IPinfo API 令牌进行身份验证。它也可以在没有身份验证令牌的情况下工作,但功能更为有限。要将访问令牌设置到您的应用程序中,请将以下内容添加到您的 \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 数据的内存缓存。已将 LRU(最近最少使用)缓存失效功能添加到默认的 TTL(生存时间)。这意味着值将缓存指定的时间;如果达到缓存的最大大小,将根据需要失效缓存值,从最老的缓存值开始。

修改缓存选项

可以通过在 $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 选择机制

默认情况下,使用进入请求的 IP。

由于您系统的期望 IP 可能位于其他位置,IP 选择机制是可配置的,并有一些内置的替代选项。

使用内置 ip 选择器

DefaultIPSelector

如果没有提供 IP 选择器,则默认使用 DefaultIPSelector。它返回来自进入请求的源 IP。

可以通过在 \config\services.php 中设置 ip_selector 配置值来显式设置此选择器。

'ipinfo' => [
    'ip_selector' => new DefaultIPSelector(),
],
OriginatingIPSelector

OriginatingIPSelector 通过尝试从 X-Forwarded-For 标头中提取 IP 地址来选择 IP 地址。除非您的代理设置允许您信任它,否则这并不总是最可靠的。如果不存在该头,它将默认为请求的源 IP。

可以通过在 \config\services.php 中设置 ip_selector 配置值来设置此选择器。

'ipinfo' => [
    'ip_selector' => new OriginatingIPSelector(),
],

使用自定义 IP 选择器

如果需要自定义 IP 选择器,您可以实现 IPHandlerInterface 接口并在 \config\services.php 中设置 ip_selector 配置值。

例如

'ipinfo' => [
    ...
    'ip_selector' => new CustomIPSelector(),
],

国际化

当查找 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,
],

抑制异常

Laravel中间件不允许您捕获其他中间件的异常,所以如果IPinfo中间件抛出异常,处理起来将会非常困难。

我们允许通过在配置中指定no_except键来抑制异常。

'ipinfo' => [
    ...
    'no_except' => true,
],

如果此设置值为true时发生异常,则$request->ipinfo对象将等于null

其他库

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

关于IPinfo

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

image