You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart中获取带动态qk参数的光污染地图API数据?

如何在Dart中获取lightpollutionmap.info的qk参数并请求人工亮度数据?

我希望在Dart中从网站https://www.lightpollutionmap.info/获取人工亮度数据。点击地图时,网站会发送一个类似如下的GET请求:https://www.lightpollutionmap.info/QueryRaster/?qk=MTY3MTk1Nzk2NjUwNztpc3Vja2RpY2tzOik=&ql=wa_2015&qt=point&qd=14.850636168450944,50.09611381452743。我的问题是,如何获取每次点击地图都会变化的qk参数?我目前的代码如下:

Future initiate() async {
  var client = Client();
  Response response = await client.get(
      "https://www.lightpollutionmap.info/QueryRaster/?qk=MTY3MTk1Nzk2NjUwNztpc3Vja2RpY2tzOik=&ql=wa_2015&qt=point&qd=14.850636168450944,50.09611381452743");

  print(response.body.toString());
 }

qk参数是网站生成的时效性验证令牌,一般基于时间戳、会话信息等加密生成,要获取它可以参考以下两种方法:

方法一:从主页HTML中提取qk参数

网站主页加载时会生成qk相关令牌,你可以先请求主页,解析HTML提取对应值:

import 'package:http/http.dart' as http;
import 'package:html/parser.dart' show parse;

Future<String> getQkToken() async {
  final response = await http.get(Uri.parse("https://www.lightpollutionmap.info/"));
  if (response.statusCode == 200) {
    final document = parse(response.body);
    // 遍历页面脚本标签,查找包含qk的内容
    final scriptElements = document.querySelectorAll('script');
    for (var script in scriptElements) {
      final scriptContent = script.text;
      if (scriptContent.contains('qk')) {
        // 用正则匹配提取qk值,需根据实际页面结构调整匹配规则
        final regex = RegExp(r'qk:\s*"([^"]+)"');
        final match = regex.firstMatch(scriptContent);
        if (match != null) {
          return match.group(1)!;
        }
      }
    }
  }
  throw Exception('获取qk令牌失败');
}

// 使用示例
Future initiate() async {
  final qk = await getQkToken();
  final targetLatLng = "14.850636168450944,50.09611381452743"; // 替换为目标经纬度
  final requestUrl = Uri.parse(
      "https://www.lightpollutionmap.info/QueryRaster/?qk=$qk&ql=wa_2015&qt=point&qd=$targetLatLng");
  
  final client = http.Client();
  final response = await client.get(requestUrl);
  
  print(response.body.toString());
}

方法二:分析JS逻辑生成qk参数

如果主页未直接暴露qk值,需要追踪网站JavaScript代码:

  1. 打开浏览器开发者工具,查看地图点击请求的触发逻辑
  2. 定位生成qk参数的函数(通常涉及时间戳、会话ID的加密,比如Base64编码或自定义加密规则)
  3. 将该逻辑用Dart重写,动态生成符合要求的qk参数

注意事项

  • qk参数存在有效期,每次请求前需重新获取或生成
  • 请遵守网站使用条款,避免高频请求给服务器造成压力

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:55:21