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

Python与Flutter HTTP请求差异:Flutter请求返回404问题排查

问题分析与解决方案

出现这个差异的核心原因是Flutter Web 环境下的 HTTP 请求与 Python requests 请求在实际发送的内容上存在细微差别,服务器对这些差别做了拦截处理,以下是具体排查方向和解决方法:

1. 修正请求头的大小写格式

HTTP 标准中请求头字段名采用驼峰式(首字母大写),虽然大部分服务器兼容小写,但 Naver 的服务器可能对字段名格式有严格校验。将你的请求头字段名改为标准格式:

var headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
  'Referer': 'https://datalab.naver.com/shoppingInsight/sCategory.naver'
};

2. 避免 URL 编码差异

直接使用 Uri.parse 可能存在隐性编码问题,改用 Uri.https 构建 URL,确保参数编码完全符合标准:

import 'package:http/http.dart' as http;

// 用键值对构建查询参数,自动处理编码
var uri = Uri.https(
  'datalab.naver.com',
  '/shoppingInsight/getCategoryKeywordRank.naver',
  {
    'cid': '50000000',
    'timeUnit': 'date',
    'startDate': '2023-02-21',
    'endDate': '2023-03-21',
    'device': '',
    'page': '1',
    'count': '20'
  },
);

var response = await http.get(uri, headers: headers);
print(response.body);

3. 补充 Origin 请求头

Flutter Web 运行在浏览器中,浏览器会自动添加 Origin 头,而 Python requests 默认不会发送这个头。服务器可能会校验 Origin 是否合法,手动添加该头匹配请求来源:

var headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
  'Referer': 'https://datalab.naver.com/shoppingInsight/sCategory.naver',
  'Origin': 'https://datalab.naver.com' // 补充Origin头
};

4. 对比实际请求内容

如果以上方法无效,建议直接查看两种请求的实际发送内容:

  • Flutter Web:打开浏览器开发者工具(F12)→ Network 标签,找到对应请求,查看 Request Headers 和 Request URL
  • Python:添加 requests 的调试日志,查看实际发送的头和 URL:
    import requests
    import logging
    
    # 开启调试日志
    logging.basicConfig(level=logging.DEBUG)
    response = requests.get(url, headers=headers)
    

对比两者的差异,就能定位服务器拦截的具体原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:03:20