【发布时间】:2016-10-04 14:57:11
【问题描述】:
我试图通过更改连接中的用户代理属性来“愚弄” Google 财经,使其认为我是网络浏览器。但是,当我使用实际的网络浏览器时,我得到的响应仍然不是我应该得到的。我想知道为什么会这样,我需要做什么才能让它工作?以下是相关代码(“站点”为https://www.google.co.uk/finance/converter?a=1&from=GBP&to=USD):
protected static String readURL(String site) {
StringBuilder buff = new StringBuilder();
try {
HttpURLConnection conn = (HttpURLConnection) new URL(site).openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
conn.connect();
BufferedReader bfr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = bfr.readLine()) != null)
buff.append(inputLine).append('\n');
bfr.close();
}
catch (Exception ioe) {
System.err.println("Failed to read from \""+site+"\": "+ioe.getMessage());
}
return buff.toString();
}
编辑:我应该注意这是在 Android 应用程序中,而不是在 Java 应用程序中。它也不会在 WebView 或任何东西中向用户显示,这发生在后台。
【问题讨论】:
-
你返回什么做什么?另外,我不确定您为什么要尝试加载动态表单
-
它与您的预期有何不同?我的第一个猜测是您所期望的 DOM 的一部分实际上是由 JavaScript 在运行时构建的,而不是 HTML 的一部分,这可能解释了这种差异。
-
我不能在这里发布完整的 HTML,它太冗长了。但这与 DOM 或 JavaScript 无关。我的问题是我从浏览器返回的内容和程序化查询有很大不同;这只能是因为谷歌知道我没有使用“真正的”网络浏览器。事实上,我知道这一点是因为我以前做过,而且效果很好,但 Google 最近一定更改了他们的网站以检测自动查询。
标签: java android http user-agent urlconnection