我看过其他类似的帖子,但没有明显的跳出来。我相信如果我错过了,有人会指出我正确的方向!
问题是我的应用程序中的这段代码曾经工作过,但现在不再工作了。所以我假设网站上发生了一些变化。我在同一应用程序中对其他三个网站使用完全相同的代码,它们运行良好。LOGCAT 显示以下错误:
org.jsoup.HttpStatusException: HTTP 错误获取 URL。Status=403, URL=http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php
我制作了这个简单的网页,我可以从本地驱动器启动它并且可以工作(如果您自己尝试,则需要将日期和时间调整为当前的UTC时间):
<form method="post" action="http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php">
Enter aerodrome ID(s)
<input type="text" name="AERO_Tab_Aero[0]">
<input type="hidden" name="AERO_Date_DATE" value="2016/01/25">
<input type="hidden" name="AERO_Date_HEURE" value="07:12">
<input type="hidden" name="bResultat" value="true">
<input type="hidden" name="ModeAffichage" value="COMPLET">
<input type="hidden" name="AERO_Duree" value="96">
<input type="hidden" name="AERO_CM_REGLE" value="1">
<input type="hidden" name="AERO_CM_GPS" value="2">
<input type="hidden" name="AERO_CM_INFO_COMP" value="1">
<p>
<input type="Submit" value="Get the bulletins">
</p>
</form>
此代码返回错误:
doc = Jsoup.connect("http://notamweb.aviation-civile.gouv.fr/Script/IHM/Bul_Aerodrome.php")
.data("bResultat", "true").data("ModeAffichage", "COMPLET")
.data("AERO_Date_DATE", date).data("AERO_Date_HEURE", time).data("AERO_Duree", "96").data("AERO_CM_REGLE", "1").data("AERO_CM_GPS", "2")
.data("AERO_CM_INFO_COMP", "1").data("AERO_Tab_Aero[0]", params[0].substring(0, params[0].length() - 1))
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36")
.timeout(6000).post();
思潮?
编辑#1:当我使用我的迷你网页时,我看到的标题是:
请求标头 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
接受编码:gzip,放气
Accept-Language:en-US,en;q=0.8,en-AU;q=0.6
缓存控制:最大年龄=0
连接方式:保持活动
状态内容长度:180
内容类型:application/x-www-form-urlencoded
主办:notamweb.aviation-civile.gouv.fr
来源:空
升级不安全请求:1
用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 野生动物园/537.36
表单数据
AERO_Tab_Aero[0]:KLAX
AERO_Date_DATE:2016/01/25
AERO_Date_HEURE:11:21
b结果:真
模式连接:完成
AERO_Duree:96
AERO_CM_REGLE:1
AERO_CM_GPS:2
AERO_CM_INFO_COMP:1
问题已解决。问题是模拟器时钟错误,导致网页拒绝请求。
JonasCz 的帮助想法:
解决此问题的一种方法是在桌面浏览器中加载页面,然后查看开发人员工具的网络选项卡,以了解它到底在发送什么,尤其是 cookie 和标头。我的猜测是,您需要发送其他/附加cookie,或者可能是Referer标头,因为网站可能正在检查这一点,然后根据您的请求发送相同或相似的标头/cookie。