使用Jsoup获取in.bookmyshow.com状态码时遇403 Forbidden异常求解决
解决Jsoup请求BookMyShow返回403 Forbidden的问题
BookMyShow的反爬机制会校验多个请求头字段,只添加User Agent不足以绕过拦截。以下是可行的解决方案:
1. 模拟完整浏览器请求头
除User Agent外,还需补充浏览器常用的请求头字段,让请求更贴近真实用户行为,比如Accept、Accept-Language、Accept-Encoding、Referer等。
2. 携带会话Cookie请求
部分网站会在首次请求时生成会话Cookie,后续请求必须携带该Cookie才能通过校验,可先发起一次请求获取Cookie,再用该Cookie发送目标请求。
3. 增加请求延迟
模拟人类访问的间隔,避免因请求频率过高被反爬机制识别。
修改后的完整代码
import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.IOException; public class BookMyShowStatusChecker { public static void main(String[] args) { String url = "https://in.bookmyshow.com/"; try { // 第一步:获取初始会话Cookie Connection initialConn = 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") .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("Accept-Encoding", "gzip, deflate, br") .header("Referer", "https://www.google.com/") .header("Connection", "keep-alive") .header("Upgrade-Insecure-Requests", "1"); Connection.Response initialResponse = initialConn.execute(); // 获取会话Cookie String sessionCookie = initialResponse.cookie("BMS_SESSION"); // 模拟人类访问延迟 Thread.sleep(1000); // 第二步:携带Cookie发起目标请求 Connection finalConn = 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") .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("Accept-Encoding", "gzip, deflate, br") .header("Referer", "https://in.bookmyshow.com/") .header("Connection", "keep-alive") .header("Upgrade-Insecure-Requests", "1") .cookie("BMS_SESSION", sessionCookie); Connection.Response finalResponse = finalConn.execute(); int statusCode = finalResponse.statusCode(); System.out.println("HTTP Status Code: " + statusCode); // 如需解析HTML内容 Document document = finalResponse.parse(); // 后续解析逻辑... } catch (IOException | InterruptedException e) { e.printStackTrace(); } } }
补充说明
- 建议定期更新User Agent为当前主流浏览器的版本,避免因UA过旧被拦截。
- 如果仍出现403,可通过浏览器F12的Network面板查看真实请求的所有头信息,补充缺失的字段;或尝试更换代理IP。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

