如果您在浏览器网址中输入以下内容:
它返回大量数据。但是,如果我尝试使用Input StreamReader捕获该数据,则返回的唯一数据是
{“ retHTML”:“”,“ rlist”:“”}
这是程序:
List<Property> scrapePropertyInfo(List<Date> auctionDates) {
List<Property> properties = new ArrayList<>();
String urlStr = "https://charlotte.realforeclose.com/index.cfm?zaction=AUCTION&Zmethod=UPDATE&FNC=LOAD&AREA=W&PageDir=0&doR=1&AUCTIONDATE=07/16/2019";
String str = null;
try {
URL url = new URL(urlStr);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuilder stringBuilder = new StringBuilder();
while ((str = in.readLine()) != null) {
stringBuilder.append(str);
}
System.out.println("Url: "+urlStr);
System.out.println(stringBuilder.toString());
in.close();
} catch (MalformedURLException ex) {
Logger.getLogger(CharlotteCtyFL.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(CharlotteCtyFL.class.getName()).log(Level.SEVERE, null, ex);
}
return properties;
}
有人知道为什么吗?
编辑:现在稍微聪明一点 因此,显然,不仅URL,还需要将更多的内容发送到服务器。由于这是动态的ajax数据,仅当您在原始网页上要求很好时才进行填充,因此需要在java中进行模拟。
我发现了如何在chrome F12调试器控制台中获取该信息。在网络-> XHR->预览下,单击每个项目,直到看到期望的数据。然后右键单击它,然后选择“复制”->“复制请求标题”。
这是复制的内容:
GET /index.cfm?zaction=AUCTION&Zmethod=UPDATE&FNC=LOAD&AREA=W&PageDir=0&doR=1&tx=1563231065712&bypassPage=1&test=1&_=1563231065712 HTTP / 1.1 主持人:charlotte.realforeclose.com 连接:保持活动状态 接受:application / json,text / javascript, / ; q = 0.01 X-Requested-With:XMLHttpRequest 用户代理:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 75.0.3770.100 Safari / 537.36 来源:http://evil.com/ 推荐人:https://charlotte.realforeclose.com/index.cfm?zaction=AUCTION&Zmethod=PREVIEW&AUCTIONDATE=07/16/2019 接受编码:gzip,deflate,br 接受语言:en-US,en; q = 0.9 Cookie:cfid = 6f228aa1-bb7e-4734-92ff-39eabf23ed9b; cftoken = 0; CF_CLIENT_CHARLOTTE_REALFORECLOSE_TC = 1563229207612; AWSELB = E7779D5F1C1F6ABE3513A5C5B6B0C754520B66675A407900314ABAC5333A52E93FD1A8D7401D89BC8D5E8B98059C8AAC5507D12A2C6ED07F7E7CB77311BD7FB09B738DB945; _ga = GA1.2.1823487290.1563231012; _gid = GA1.2.1418453663.1563231012; _gat = 1; _gcl_au = 1.1.273755450.1563231013; __utma = 65865852.1823487290.1563231012.1563231014.1563231014.1; __utmc = 65865852; __utmz = 65865852.1563231014.1.1.utmcsr = realauction.com | utmccn =(referral)| utmcmd = referral | utmcct = / client-sites; __utmt_UA-51657054-1 = 1; __utmb = 65865852.2.10.1563231014; testcookiesenabled =启用; CF_CLIENT_CHARLOTTE_REALFORECLOSE_LV = 1563231067363; CF_CLIENT_CHARLOTTE_REALFORECLOSE_HC = 73
现在如何将其放入Java请求中?我知道如何用javascript而不是Java。
答案 0 :(得分:1)
实际上,我在浏览器中打开了您的URL,并得到
{“ retHTML”:“”,“ rlist”:“”}
然后,我写了自己的类似于您的代码,并得到了相同的String作为响应。因此,对我来说,浏览器和Java代码获取了相同的信息。但这很容易解释,不一定如此。服务器可以检查并检测发送请求的客户端是否是浏览器,以及发送请求的类型和位置。服务器可以根据这些详细信息发送回定制的响应。
答案 1 :(得分:0)
尝试运行此代码–它会获取该网址并显示输出:
curl "https://charlotte.realforeclose.com/index.cfm?zaction=AUCTION&Zmethod=UPDATE&FNC=LOAD&AREA=W&PageDir=0&doR=1&AUCTIONDATE=07/16/2019"
因此,您看到的行为不是Java正在(或没有)做的事情。
我怀疑远程服务器正在查看入站HTTP请求并决定返回什么。在您的Java代码中,就像这个简单的curl
示例一样,没有浏览器标头,用户代理等。因此服务器可能会给出一个通用的答案。
作为另一项测试,您可以尝试将Java代码更改为其他代码:
String urlStr = "http://duckduckgo.com";