| 12345678910111213141516171819202122232425262728293031323334353637 |
- <?php
- namespace App\Services\Agent;
- use Illuminate\Http\Request;
- class AgentContextService
- {
- public function device(Request $request): string
- {
- $ua = strtolower((string) $request->userAgent());
- return preg_match('/mobile|android|iphone|ipad|ipod|windows phone|harmonyos/', $ua)
- ? 'mobile'
- : 'pc';
- }
- public function domain(Request $request): string
- {
- foreach ([(string) $request->header('Origin'), (string) $request->header('Referer')] as $url) {
- $host = parse_url($url, PHP_URL_HOST);
- if (is_string($host) && $host !== '') {
- return strtolower($host);
- }
- }
- return strtolower((string) $request->getHost());
- }
- public function location(Request $request): array
- {
- // 优先读取 CDN/网关在边缘完成的 IP 归属地;没有时保留空值,避免登录依赖外部接口。
- return [
- 'country' => mb_substr((string) ($request->header('CF-IPCountry') ?: $request->header('X-IP-Country', '')), 0, 128),
- 'region' => mb_substr((string) $request->header('X-IP-Region', ''), 0, 128),
- 'city' => mb_substr((string) $request->header('X-IP-City', ''), 0, 128),
- ];
- }
- }
|