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

如何通过Splash发送代理请求?配置后仍显示真实IP的错误排查

问题原因

代理配置未生效是API用法错误导致的,核心问题有两个:

  • 你调用的request:set_proxy是单请求维度的代理设置方法,入参要求按顺序传入代理host、代理端口(数字类型)、认证用户名、认证密码、代理类型(可选,默认HTTP),不支持传入拼接了认证信息的完整代理URL,也不接受table类型参数。你传入的{'http://login:password@host_proxy_ip:port'}是单元素Lua表,属于无效参数,Splash不会抛出报错,会直接忽略该配置,请求默认走本地直连,最终返回真实IP。
  • 全页面统一挂代理不需要在on_request回调里逐请求设置,直接调用splash全局对象的set_proxy方法即可,该方法原生支持带认证信息的代理URL字符串,写法更简洁,不易出错。
修正方案

方案1:全局设置代理(推荐)

无需编写on_request回调,直接在main函数开头配置全局代理:

function main(splash, args)
  splash:set_proxy("http://login:password@host_proxy_ip:port")
  assert(splash:go(args.url))
  assert(splash:wait(0.5))
  assert(splash:set_viewport_full())
  return {
    html = splash:html(),
    url = splash:url(),
  }
end

方案2:逐请求设置代理(适合多代理切换场景)

如果需要针对不同请求匹配不同代理,在on_request回调中按参数顺序传入拆分后的代理信息即可,注意端口必须传数字类型,不能传字符串:

function main(splash, args)
  splash:on_request(function(request)
    -- 参数顺序:代理地址、端口(数字)、认证账号、认证密码
    request:set_proxy("host_proxy_ip", 替换为数字类型的代理端口, "login", "password")
  end)
  assert(splash:go(args.url))
  assert(splash:wait(0.5))
  assert(splash:set_viewport_full())
  return {
    html = splash:html(),
    url = splash:url(),
  }
end
排查提示

如果修正脚本后仍返回真实IP,先在本地验证代理本身可用性,排除代理失效、认证信息错误、端口不通的问题,确认代理服务可以正常转发请求后再测试Splash脚本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:48:38