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

使用TidHTTP访问Adsweb时部分电脑出现HTTP 402错误求助

解决TidHTTP访问Adsweb跨机器出现HTTP 402错误的问题

这个问题挺典型的——同一代码在不同机器上表现迥异,HTTP 402(需要付款)错误看似和计费相关,但跨机器的差异大概率不是代码本身的锅,得从环境和请求细节入手排查。咱们一步步来分析:

1. 检查两台机器的公网IP状态

Adsweb这类服务经常会根据请求来源的公网IP做计费管控,比如某台机器的IP在服务商的付费白名单/已授权范围内,另一台的IP则属于未付费、试用过期或者未授权的段。

  • 操作:分别在两台机器的浏览器里查询各自的公网IP,然后联系Adsweb服务商确认这两个IP的计费权限状态。

2. 统一TidHTTP的请求头配置

不同机器上的TidHTTP可能默认请求头不一样(比如User-Agent、Cookie等),有些服务商会根据这些头信息做身份或权限判断,导致不同机器的请求被区别对待。

  • 解决:在代码里强制统一请求头,比如:
    CSHttp := TidHTTP.Create(nil);
    try
      // 统一设置User-Agent,模拟主流浏览器
      CSHttp.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36';
      // 统一连接参数
      CSHttp.Request.Connection := 'keep-alive';
      CSHttp.Request.Accept := 'application/json, text/javascript, */*; q=0.01';
      
      // 后续的URL拼接和请求逻辑...
    finally
      CSHttp.Free;
    end;
    
  • 额外检查:确认两台机器上的Indy组件版本是否一致,旧版本可能存在请求头处理的bug,尽量升级到最新稳定版。

3. 排除网络代理/防火墙的干扰

其中一台机器可能通过代理服务器访问,而代理的IP被服务商标记为未付费;或者本地防火墙/安全软件修改了HTTP请求头,导致服务端识别异常。

  • 排查:
    • 在两台机器上关闭所有代理,直接用浏览器访问目标URL(就是你代码里拼接的MyURL),看是否也出现402错误;
    • 临时关闭防火墙/安全软件,再运行程序测试,观察错误是否消失。

4. 修复URL编码的潜在问题

你代码里手动拼接了URL编码的查询参数,但Myphone变量如果包含特殊字符(比如+、&、%等),手动拼接会导致编码错误,有些服务端会把这种错误解析成权限问题,返回402而非400。

  • 解决:用Indy自带的TIdURI.URLEncode方法处理动态参数,确保编码正确:
    var
      EncodedPhone: string;
    begin
      CSHttp := TidHTTP.Create(nil);
      try
        MyURL := MasterTbl.FieldByName('DatabaseUrl').AsString;
        // 对Myphone做URL编码,避免特殊字符导致的请求错误
        EncodedPhone := TIdURI.URLEncode(Myphone);
        MyUrl := MyUrl + '__query?statement=select name,accountnum from customer where accountnum=''' + EncodedPhone + '''&$format=json';
        
        // 执行请求...
      finally
        CSHttp.Free;
      end;
    end;
    

5. 清除会话Cookie的影响

可能其中一台机器之前访问过服务端,留下了有效的会话Cookie,而另一台没有。可以尝试禁用Cookie管理,强制两台机器的请求处于相同的会话状态:

CSHttp.CookieManager := nil; // 禁用TidHTTP的Cookie自动管理
CSHttp.Request.Cookie := ''; // 清空手动设置的Cookie

先从IP和请求头这两个最可能的点入手排查,再逐步排除其他因素,应该能定位到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:23:51