ogestor / ipinfolaravel
这是官方的Laravel库,用于IPinfo,这是最可靠、最准确和最深入的数据来源。我们处理数以TB计的数据,以生成我们定制的IP地理定位、公司、运营商和IP类型数据集。请访问我们的开发者文档 https://ipinfo.io/developers。
Requires
- illuminate/support: ^6.0
- ipinfo/ipinfo: ^1.0@dev
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ~3.0
- phpunit/phpunit: ~7.0
- sempro/phpunit-pretty-print: ^1.0
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
过滤掉包含 bot
或 spider
的用户代理的请求。对于这些请求,不会查找 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 万家企业和开发者提供服务。