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

请求协助从代码层面访问集装箱查询网站获取数据

我请求协助从代码层面访问某集装箱查询网站。该网站设有“Container number”输入框,输入编号后点击箭头即可获取对应集装箱的数据。但遗憾的是,页面源码中无可用IdHTTP1->Get (address)函数加载到程序中的相关数据。我缺乏网站数据读取经验,此前遇到的场景是页面地址包含跳转所需全部数据,但本次网站地址始终不变。

集装箱查询页面

解决方法

这种页面地址不变但能动态加载数据的情况,本质是用了异步请求(AJAX)——数据不是通过页面跳转传递的,而是在后台悄悄发送请求获取的,所以直接Get原页面肯定拿不到查询结果。我给你一步步拆解处理流程:

  1. 抓包定位真实数据接口
    打开浏览器的开发者工具(按F12),切换到「网络」标签页,然后在页面输入集装箱编号点击查询。此时你会看到列表里新增了几个请求,其中一个就是用来获取集装箱数据的核心接口。重点记录这个请求的三个关键信息:
  • 请求方式(是GET还是POST)
  • 接口的完整URL
  • 需要携带的参数(比如集装箱编号对应的参数名,可能是containerNo或者类似的标识)
  1. 用IdHTTP模拟请求
    根据抓包得到的信息,用IdHTTP来模拟浏览器的请求:
  • 如果是GET请求:把参数直接拼接到接口URL末尾,调用IdHTTP1->Get()方法
  • 如果是POST请求:构造参数列表,通过IdHTTP1->Post()发送

举个Delphi代码示例(假设抓包后发现是POST请求,参数名是containerNumber):

var
  RequestParams: TStringList;
  ResponseData: string;
begin
  RequestParams := TStringList.Create;
  try
    // 替换成你要查询的集装箱编号
    RequestParams.Add('containerNumber=ABC1234567');
    // 替换成抓包得到的真实接口地址
    ResponseData := IdHTTP1.Post('https://example.com/api/container/query', RequestParams);
    // 返回的ResponseData可能是JSON或HTML格式,你可以根据需求解析
    ShowMessage(ResponseData);
  finally
    RequestParams.Free;
  end;
end;
  1. 模拟浏览器请求头(关键)
    很多网站会通过请求头判断访问来源,你需要在IdHTTP的Request属性里设置必要的头信息,让请求看起来像是真实浏览器发起的:
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36';
IdHTTP1.Request.Referer := '原查询页面的URL'; // 替换成你访问的那个集装箱查询页地址

按照这个流程操作,应该就能成功获取到你需要的集装箱数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:58:32