Java 从网站读取和打印HTML会挂断
我一直在编写一些Java代码,其中字符串被转换为URL,然后用于下载和输出相应的URL。不幸的是,当我运行程序时,它只是挂断了。有人有什么建议吗 注意:我使用了import java.io.*和import java.net*Java 从网站读取和打印HTML会挂断,java,html,Java,Html,我一直在编写一些Java代码,其中字符串被转换为URL,然后用于下载和输出相应的URL。不幸的是,当我运行程序时,它只是挂断了。有人有什么建议吗 注意:我使用了import java.io.*和import java.net* public static boolean htmlOutput(String testURL) throws Exception { URL myPage2 = new URL(testURL); //converting String to URL S
public static boolean htmlOutput(String testURL) throws Exception {
URL myPage2 = new URL(testURL); //converting String to URL
System.out.println(myPage2);
BufferedReader webInput2 = new BufferedReader(
new InputStreamReader(myPage2.openStream()));
String individualLine=null;
String completeInput=null;
while ((individualLine = webInput2.readLine()) != null) {
//System.out.println(inputLine);
System.out.println(individualLine);
completeInput=completeInput+individualLine;
}//end while
webInput2.close();
return true;
}//end htmlOutput()
[虽然此答案有助于OP,但它是错误的。HttpURLConnection
因此这不可能是OP的问题。我将在OP删除接受标记后立即删除它。]
我的猜测是,由于您尝试连接的页面向您发送重定向响应(即302),因此您不会在响应流中返回任何内容
尝试通过读取响应代码并迭代响应头来验证这一点。应该有一个名为Location
的标题,其中包含您需要遵循的新url
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int code = connection.getResponseCode();
Map<String, List<String>> map = conn.getHeaderFields();
// iterate over the map and find new url
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
int code=connection.getResponseCode();
Map Map=conn.getHeaderFields();
//在地图上迭代并找到新的url
如果您在使用上述代码段时遇到问题,请查看
您可以帮自己一个忙,使用第三方http客户端,这样可以处理重定向,否则您应该手动执行此操作。使用
jSoup
,这将非常容易。调试说明了什么?它挂在哪里?您如何定义“挂起”?是否有任何错误,或者它只是开始然后在打印任何东西之前完成?您使用了哪个测试url,我可以使用http[colon][slash][slash]www[dot]google[dot]com作为测试url运行此程序。@eggHunter我很高兴它为您解决了问题。请不要忘记接受正确的答案:)经过一些调查,我发现我的代码确实有效,但你是对的,有一个奇怪的重定向内置。我仍然可以通过代码重定向抓取页面,错误位于我发送方法的字符串中。它有一个笨拙的引号。@eggHunter嗯,实际上我们不可能都是对的。正如我现在看到的,默认情况下,HttpURLConnection
可以处理这个问题。它有一个用于setFollowRedirects()
的方法,应该能够获取html。您能否确认您的原始代码正常工作,问题出在您使用的url上?如果是,我将删除我的答案,因为它是wrong@eggHunter你能接受这个答案吗?系统不允许我删除它,只要它被接受