Java测试URL请求测试

时间:2013-11-21 20:18:48

标签: java html eclipse url request

你好我是java和编程的新手,所以请原谅我,如果我错了一些容易的东西。我的目标是导入文本文件,扫描每一行,测试行(如果是URL),然后将其打印到输出文件。所以程序正在测试每个URL,如果URL有效(工作),我将在新的输出文件中打印该行。

我的问题是测试网址部分。它读取该行以便打印URL,但它会多次打印任何建议?有没有办法让它打印一次?我想我明白它会多次打印,因为它会逐行读取HTML代码。

try
{
    // Test URL Connection
    URL url = new URL("http://www." + line);
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    wr = new OutputStreamWriter(conn.getOutputStream());
    wr.flush();

    // Get the response
    rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    while((lines = rd.readLine()) != null)
    {
        System.out.println(line);
    }
}
catch(Exception e)
{
    System.out.println(e.toString());
}

1 个答案:

答案 0 :(得分:0)

您的代码正在读取名为“lines”的变量行,但您正在打印行变量。行变量是您用来创建URL的行:

URL url = new URL("http://www."+line);

如果您只想打印出网址,那么您可能需要考虑将网址构建为这样的字符串:

String targetUrl = String.format("http://www.%s", domainName);
System.out.println(targetUrl);

然后创建URL对象。

URL url = new URL(targetUrl);

如果您尝试打印从目标网址检索的内容,请更改代码以打印出“行”:

System.out.println(lines); 

使用更多描述性变量名称会更好。例如,不使用“line”构造URL,而是使用类似“domainName”的变量名称。然后,当您一次读取一行时,可以使用变量名称“line”。

// Assuming that domainName is set before the try block
try
{
    // Test URL Connection
    URL url = new URL("http://www."+domainName);
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.flush();

    String line = null;

    // Get the response
    rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    while ((line = rd.readLine()) != null) 
    {
        System.out.println(line);                       
    }
}
catch (Exception e) 
{
    System.out.println(e.toString());
}