使用Jsoup请求http://meteo.bg/en/报404错误,求助排查原因
问题分析与解决:Jsoup抓取meteo.bg/en/出现404异常
本地代码抓取http://meteo.bg/en/时抛出404,但Jsoup演示页能成功,核心原因是网站的反爬机制识别了你的请求特征,和演示页的请求存在差异。以下是具体排查和解决方法:
1. 更新请求头,模拟真实浏览器请求
你的代码仅设置了User-Agent和Referrer,但Jsoup演示页默认携带了更完整的请求头,网站可能通过这些字段判断请求合法性:
- 替换为较新的浏览器User-Agent(旧版Firefox UA容易被标记为异常)
- 补充
Accept、Accept-Language等必要头信息
示例代码:
String url = "https://meteo.bg/en/"; // 优先尝试HTTPS协议 Document doc = null; try { doc = Jsoup.connect(url) .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .referrer("https://www.google.com") .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") .header("Accept-Language", "en-US,en;q=0.5") .header("Connection", "keep-alive") .header("Upgrade-Insecure-Requests", "1") .followRedirects(true) // 明确开启重定向跟随 .timeout(5000) .get(); // 处理数据逻辑 } catch (IOException e) { e.printStackTrace(); // 打印异常详情,不要直接返回null return null; }
2. 切换到HTTPS协议
很多网站现在强制HTTPS访问,HTTP请求可能被重定向或直接返回404。将URL从http://改为https://再尝试。
3. 排查IP封禁问题
如果你的本地IP因频繁请求被网站封禁,会导致404。可以:
- 切换网络环境(比如使用手机热点)
- 添加请求间隔,避免短时间内重复请求
4. 复制演示页的请求特征
打开浏览器开发者工具,查看Jsoup演示页发送的完整请求头(包括Cookie、Host等),将这些字段完全复制到你的代码中,确保请求特征和演示页一致。
内容的提问来源于stack exchange,提问作者Vladimir Mihaylov
相关产品推荐
相关产品推荐

