xbnz/laravel-multi-ip

该软件包已被废弃,不再维护。作者建议使用 xbnz/laravel-multi-api 软件包。

为Laravel提供的异步API包装器,支持代理和多个密钥

2.0.2 2022-05-19 20:31 UTC

This package is auto-updated.

Last update: 2022-08-04 22:44:01 UTC


README

GitHub Workflow Status

Laravel Multi API

支持的API

提供商 需要密钥 标准化对象
Abstractapi.com NormalizedGeolocationResultsData::class
Abuseipdb.com NormalizedGeolocationResultsData::class
Ipapi.co NormalizedGeolocationResultsData::class
Ipapi.com NormalizedGeolocationResultsData::class
Ip-api.com NormalizedGeolocationResultsData::class
Ipdata.co NormalizedGeolocationResultsData::class
Ipgeolocation.io NormalizedGeolocationResultsData::class
Ipinfo.io NormalizedGeolocationResultsData::class
Mtr.sh: ping MtrDotShPingResultsData::class
Mtr.sh: mtr MtrDotShMtrResultsData::class

安装

composer require xbnz/laravel-multi-api

确保您的composer.json文件指示Laravel自动绑定包服务提供者到您的项目

"extra": {
  "laravel": {
    "dont-discover": []
  }
},

配置文件

  • 发布配置文件
php artisan vendor:publish --tag=ip-resolver
php artisan vendor:publish --tag=resolver
// resolver.php

'use_proxy' => (bool),
'proxies' => (array<string>), // https://13.44.34.34:8080, https://user:pass@33.22.55.66:8080

'timeout' => (int), // seconds
'cache_period' => (int) //seconds,

'async_concurrent_requests' => (int),

'use_retries' => (bool),
'tries' => (int),
'retry_sleep' => (float), // seconds
'retry_sleep_multiplier' => (float) // seconds,
// ip-resolver.php

'api-keys' => (array<Driver>),

/**
  * IpGeolocationDotIoDriver::class => [env(KEY_1), env(KEY_2), ...],
 */

/**
 * Visit https://mtr.sh/probes.json to retrieve the list of probe IDs
 */
\XbNz\Resolver\Domain\Ip\Drivers\MtrDotShMtrDriver::class => [
    'search' => (array<string>)
],

\XbNz\Resolver\Domain\Ip\Drivers\MtrDotShPingDriver::class => [
    'search' => (array<string>)
],

支持多个API密钥

您可以在配置文件中为每个驱动程序配置多个API密钥。API密钥将在每个HTTP请求中随机选择。如果您已选择使用重试功能,则密钥将在每次尝试时重新激活。

缓存

默认情况下强制执行缓存,因为替代方案会迅速耗尽您的配额限制。如果您正在使用时间敏感的服务,请使用Laravel的Config外观来在API调用之前减少缓存。

Config::set(['resolver.cache_period' => 1]);

代理

支持HTTP、HTTPS、SOCKS。请使用上述标记的URL结构。如果您已选择使用重试功能,则代理将在每次尝试时重新激活。

API停机可能会破坏您的应用程序。请提前计划。

Geolocation php (11)

地理位置

您可以从每个IP API期望得到的最低标准化响应。请注意,可能会有null值,有关结构,请参阅NormalizedGeolocationResultsData::class。

  • 查询的IP地址
  • 国家
  • 城市
  • 纬度
  • 经度
  • 组织/ISP

New Project (1)

组合所有API

您可以使用所有API来获取IP的完整信息,从而生成一份全面的报告。如果您有大量IP和驱动程序,可以在config文件中的resolver.php配置文件中增加异步值以加快处理速度。

public function example(Resolver $resolver)
{
	$result = $resolver
	    ->ip()
	    ->withIps(['8.8.8.8', '2606:4700:4700::1111'])
	    ->ipGeolocationDotIo()
	    ->ipApiDotCom()
	    ->ipInfoDotIo()
	    ->normalize();
	// ...

}

原始API输出

如果您不希望接收压缩的标准化信息,可以使用原始方法

public function example(Resolver $resolver)
{
	$result = $resolver
        ->ip()
        ->withIps(['8.8.8.8', '2606:4700:4700::1111'])
        ->ipGeolocationDotIo()
        ->ipApiDotCom()
        ->ipInfoDotIo()
        ->raw();
    // ...
}
ℹ️ 这与 normalize() 的工作方式相同。请注意,使用此选项无法保证数据完整性,大多数情况下结果直接从 API 返回。

链式调用的替代方案

public function example(Resolver $resolver)
{
    $result = $resolver
        ->ip()
        ->withIps(['8.8.8.8', '2606:4700:4700::1111'])
        ->withDrivers([
            IpGeolocationDotIoDriver::class,
            // other drivers...
        ])
        ->normalize();
    // ...
}

使用 MTR.sh API 进行停机时间监控

MTR.sh 是一个 Looking Glass API,让您可以访问全球数百个网络。这对于停机时间监控特别有用。MTR.sh API 的问题在于结果对编程语言不友好。但对于 Laravel 开发者来说,这种情况已经不再存在。

MTR.sh 搜索词示例

选择您想要使用的 MTR.sh 网络

搜索类型 搜索词
国家 ['德国', '巴西', '加拿大']
城市 ['法兰克福', '里约', '多伦多']
['欧洲', '南美洲', '北美洲']
UN/LOCODE ['defra', 'brrio', 'cator']
ISP ['G-Core Labs', 'Anexia', 'Google']

要获取完整列表,请访问 https://mtr.sh/probes.json

public function example(Resolver $resolver)
{
    $result = $resolver
        ->ip()
        ->withIps(['1.1.1.1'])
        ->mtrDotShMtr()
        ->mtrDotShPing()
        ->normalize();
    // ...

}
ℹ️ 一些 MTR.sh 探针可能不支持 IPv6,或者可能没有某些功能,例如执行 MTR 测试的能力。当您指定搜索词时,如果没有探针与 IP 或测试类型功能匹配,将抛出 MtrProbeNotFoundException::class

New Project (2)

关于设计的简短说明

如果您想扩展包以支持其他 API,请记住以下事项

  • 每个端点一个驱动程序 -- GET: https://someapi.io/geo/1.1.1.1: SomeApiGeoDriver::class -- POST: https://someapi.io/geo/bulk: SomeApiGeoBulkDriver::class

  • AuthStrategiesRetryStrategies 负责应用 API 密钥头、路径和查询参数,而不是驱动程序。

  • Normalize() 功能仅当存在一个 Mapper::class 支持 Driver::class 的目标时才起作用。

  • 映射器、驱动程序和策略都在 ResolverServiceProvider::classIpServiceProvider::class 中注册。

  • 新的 API 类别,如货币转换 API 驱动程序,将遵循相同的模式:在理论上的 CurrencyServiceProvider::class 中注册。

贡献

欢迎提交拉取请求和问题。

许可

MIT