[英]Unexpected URL request result in Java
有一个带有下拉列表的网站http://l2on.net/ :
<select size="1" onchange="window.location.href = '/?c=market&a=search&q=&type=0&setworld=' + this.value;">
<option selected value="43">Cadmus</option>
<option value="44">Athebaldt</option>
<option value="45">Blackbird</option>
<option value="46">Ramsheart</option>
<option value="47">Esthus</option>
<option value="49">Lancer</option>
<option value="13">Airin</option>
<option value="5">Erica</option>
<option value="27">Elcardia</option>
</select>
我的猜测是可以通过“ GET”查询选择我需要的服务器,就像在html代码中一样。
<select size="1" onchange="window.location.href = '/?c=market&a=search&q=&type=0&setworld=' + this.value;">
提出建议后,代码如下所示:
l2on = new URL("http://l2on.net/?setworld=BlackBird");
l2onConn = l2on.openConnection();
l2onConn.setRequestProperty("Accept-Charset", "UTF-8");
l2onConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
l2onConn.connect();
br = new BufferedReader(new InputStreamReader(l2onConn.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
content += line + System.lineSeparator();
}
System.out.println(content.contains("<option selected value=\"43\">Cadmus</option>"));
我也尝试了UrlEncoder.encode()
来正确编码查询。 并作为服务器的setworld参数id传递(我在html页面源代码中找到),例如http://l2on.net/?setworld=45
。
所有这些东西都可以在浏览器中完美运行,而不能在Java中运行(我知道,因为毕竟在接受的页面中我可以找到
<option selected value="43">Cadmus</option>
这表明服务器没有任何变化,并且显示了默认服务器的信息,并且希望以某种方式检索所有可能服务器的信息。
抱歉,我对html不太了解,所以可能我做错了什么,
请帮助。
这可能是一个疯狂的猜测。 它可能在您的浏览器中起作用的原因可能是,在您的浏览器中,您已经通过了网站的身份验证?
我的浏览器未通过此网站的身份验证。 当我尝试以下网址时:
http://l2on.net/?setworld=Atlant
我将重定向到主页: http://l2on.net
: http://l2on.net
。
这正是Java程序会发生的情况。
也许是另一个疯狂的猜测,但这最近在连接到某些站点时对我有所帮助。
有些站点会阻止某些用户代理,默认情况下,java使用的用户代理使您看起来像个机器人。 它将类似于“ Java / 1.6.0_14”,后一部分取决于Java版本。
您是否尝试过设置其他用户代理? 您可以这样做:
l2onConn.setRequestProperty("User-Agent", "Agent_you_want");
我建议尝试使用您的浏览器启动。 你可以在这里得到。
如果这行得通,那么使用某些东西来标识自己可能是正确的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.