import java.io.*;
import java.net.*;
import
javax.swing.text.*;
import javax.swing.text.html.*;
class
EnhancedURLCheck {
public static void main(String[] args)
{
HttpURLConnection.setFollowRedirects(false);
EditorKit
kit = new HTMLEditorKit();
Document doc =
kit.createDefaultDocument();
// The Document class does not yet
// handle charset's
properly.
doc.putProperty("IgnoreCharsetDirective",
Boolean.TRUE);
try {
// Create a
reader on the HTML content.
Reader rd =
getReader(args[0]);
// Parse the
HTML.
kit.read(rd, doc, 0);
// Iterate through the
elements
// of the HTML document.
ElementIterator it
= new ElementIterator(doc);
javax.swing.text.Element
elem;
while ((elem = it.next()) != null)
{
SimpleAttributeSet s =
(SimpleAttributeSet)
elem.getAttributes().getAttribute(
HTML.Tag.A);
if
(s != null)
{
validateHref(
(String)s.getAttribute(
HTML.Attribute.HREF));
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.exit(1);
}
// Returns a reader on the HTML data. If 'uri' begins
// with
"http:", it's treated as a URL; otherwise,
// it's assumed to be a local
filename.
static Reader getReader(String uri)
throws
IOException {
if (uri.startsWith("http:")) {
// Retrieve
from Internet.
URLConnection conn =
new
URL(uri).openConnection();
return new
InputStreamReader(conn.getInputStream());
} else
{
// Retrieve from file.
return new
FileReader(uri);
}
}
private static void
validateHref(String urlString) {
if ((urlString != null) &&
urlString.startsWith("http://")) {
try
{
URL url = new URL(urlString);
URLConnection
connection =
url.openConnection();
if
(connection instanceof HttpURLConnection) {
HttpURLConnection
httpConnection =
(HttpURLConnection)connection;
httpConnection.setRequestMethod("HEAD");
httpConnection.connect();
int
response =
httpConnection.getResponseCode();
System.out.println("["
+ response + "]" +
urlString);
String
location =
httpConnection.getHeaderField("Location");
if
(location != null)
{
System.out.println(
"Location: " +
location);
}
System.out.println();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
댓글 없음:
댓글 쓰기