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

Jsoup代码本地可正常访问URL 服务器部署后报HttpStatusException如何解决?

Jsoup请求跨环境运行异常排查方案

你遇到的org.jsoup.HttpStatusException异常本质是目标站点返回了非200系列的HTTP状态码,不同环境运行效果不一致的常见原因及解决方案如下:

  • 目标站点反爬策略拦截云服务器IP
    大部分站点的反爬规则会默认拦截云厂商的服务器IP段,你本地使用的家用宽带IP不在拦截名单内可正常访问,服务器IP被识别为爬虫来源直接返回403/404等错误码。你可以尝试替换代理节点、使用动态住宅IP代理解决。
  • 请求头配置缺失
    本地运行时Jsoup会自动继承系统的浏览器特征请求头,部署到服务器后默认请求头可能缺少User-Agent、Accept等字段,被站点识别为爬虫拦截。可以在请求中补充模拟浏览器的请求头:
    val document = 
        Jsoup
        .connect("http://waipian3.com/search-%E4%BD%A0----------1---/")
        .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
        .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
        .followRedirects(true)
        .get()
    
  • 服务器网络出站限制
    先登录服务器执行curl命令验证网络连通性,确认安全组、防火墙是否开放了80端口出站权限,以及DNS解析是否正常:
    curl -v "http://waipian3.com/search-%E4%BD%A0----------1---/"
    
    如果curl也无法正常返回页面内容,说明是服务器网络层面的问题,需要调整服务器网络配置。
  • 代理配置失效
    确认代码中配置的代理在服务器环境下可正常连通,代理出口IP未被目标站点封禁,Jsoup代理配置示例如下:
    // 无账号密码代理
    .proxy("代理IP", 代理端口)
    // 带账号密码代理
    .proxy("代理IP", 代理端口)
    .header("Proxy-Authorization", "Basic " + Base64.getEncoder().encodeToString("账号:密码".toByteArray()))
    

你可以在捕获异常时打印具体的HTTP状态码和返回内容,快速定位问题:

try {
    // 你的请求代码
} catch (e: org.jsoup.HttpStatusException) {
    println("异常状态码:${e.statusCode}")
    println("站点返回内容:${e.response?.body()}")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:45:05