ipinfo / ipinfolaravel
这是 IPinfo 的官方 Laravel 库,是任何地方最可靠、最准确、最深入的 IP 地址数据来源。我们处理了数以十亿字节的数据,以生成我们定制的 IP 地理位置数据、公司数据、运营商数据和 IP 类型数据集。请访问我们的开发者文档 https://ipinfo.io/developers。
Requires
- illuminate/support: >=7 <11
- ipinfo/ipinfo: ^3.1.0
Requires (Dev)
- mockery/mockery: ^1.4.2
- orchestra/testbench: >=6.4.0
- phpunit/phpunit: >=8 <10
- sempro/phpunit-pretty-print: ^1.3.0
- squizlabs/php_codesniffer: ^3.5.8
- dev-master
- v2.6.0
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.0
- v1.0.0
- dev-dependabot/npm_and_yarn/testapp/express-4.19.2
- dev-dependabot/npm_and_yarn/testapp/webpack-dev-middleware-and-laravel-mix-5.3.4
- dev-dependabot/npm_and_yarn/testapp/follow-redirects-and-axios-1.15.6
- dev-dependabot/npm_and_yarn/testapp/ip-1.1.9
- dev-dependabot/npm_and_yarn/testapp/elliptic-6.5.4
This package is auto-updated.
Last update: 2024-08-30 01:49:33 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
会过滤掉用户代理中包含 bot
或 spider
的请求。对于这些请求,不查找 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万家企业和开发者提供服务。