我正在尝试从网址连接加载网站http://www.povarenok.ru/,但内容为空。我试过其他网站 - 所有的作品。请帮忙,这个网站有什么问题?
URL url;
try {
url = new URL("http://www.povarenok.ru/");
URLConnection conn = url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String inputLine;
String fileName = "c:\\test.html";
File file = new File(fileName);
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
//inputLine is empty!!! All works with other sites
while ((inputLine = br.readLine()) != null) {
bw.write(inputLine);
}
bw.close();
br.close();
System.out.println("Done");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
更改为:
url = new URL("http://www.povarenok.ru");
^ - no slash here
看起来此网站已将/
配置为其他目的
[编辑]
再次检查并且这个斜杠实际上并非如此,从我看到它在更改urser-agent之后开始工作(在创建BufferedReader之前将其放入):
((HttpURLConnection)conn).setRequestProperty("User-Agent", "SO");
提示如何在Windows with Fiddler上调试此类问题:
您应首先安装fiddler2
- 它会允许您查看您的请求。在您的Java应用程序中,在app start上添加以下行:
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyPort", "8888");
现在,假设您有一个在webbrowser中加载的站点,但不会在您的Java应用程序中加载。您必须比较请求标头并找出差异。因此,您可以在webbrowser中加载页面,稍后在应用程序中加载页面并使用fiddler比较结果。