使用Groovy调用URL返回403状态码问题求助
解决Groovy脚本请求网页返回403的问题
问题原因
服务器返回403通常是因为它识别出你的请求并非来自标准浏览器,通过检查请求头(如User-Agent字段)拦截了非浏览器发起的请求。浏览器访问时会自动带上完整的请求头信息,而你的Groovy最简实现没有添加这些必要的头。
解决方案
在请求中添加模拟浏览器的请求头,尤其是User-Agent字段,以下是修改后的代码:
def url = new URL("https://measurements.mobile-alerts.eu/Home/MeasurementDetails?deviceid=021B5594EAB5&vendorid=60122a8b-b343-49cb-918b-ad2cdd6dff16&appbundle=eu.mobile_alerts.mobilealerts&fromepoch=1674432000&toepoch=1674518400&from=23.01.2023%2000:00&to=24.01.2023%2000:00&command=refresh") def connection = url.openConnection() as HttpURLConnection // 模拟Chrome浏览器的User-Agent connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") // 添加浏览器默认的Accept头 connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8") try { def res = connection.inputStream.getText() println(res) } finally { connection.disconnect() }
额外排查点
- 如果添加
User-Agent后仍返回403,可以打开浏览器开发者工具(F12),在请求的「Headers」标签页复制完整的请求头(包括Referer、Cookie等),全部添加到Groovy请求中 - 若服务器需要会话验证,可能需要先模拟登录流程获取有效Cookie,再携带Cookie发起读数请求
内容的提问来源于stack exchange,提问作者Frank Winkler
相关产品推荐
相关产品推荐

