public List<String> run(String url) {

        List<String> urlsRes = new ArrayList<String>();
        // 処理時刻をクリア
        setTimeStart(0);
        setTimeEnd(0);

        // HTTP接続オブジェクト
        HttpURLConnection con = null;

        try {
            // HTTPリクエストを送信する
            con = getHttpConnection(url);

            // リダイレクト処理
            setStatusCode(con.getResponseCode()); // ここでHTTP通信していた
            String location = con.getHeaderField("Location");
            setTimeEnd(System.currentTimeMillis());
            if (isRedirectable(Constant.FOLLOW_REDIRECT, getStatusCode(), location, url)) {
                String fullLocation = UrlUtils.normalizeUrl(url, location);
                processForSuccess(url, getStatusCode()); // リクエストの取得に成功した場合の処理
                return Arrays.asList(fullLocation);
            }

            // Getting Response Body
            String responseBody = getResponseBody(con);

            // URLを抽出する
            Analyzer analyzer = new Analyzer();
            urlsRes = analyzer.analyze(url, responseBody);

            // リクエストの取得に成功した場合の処理
            processForSuccess(url, getStatusCode());

        } catch (SocketTimeoutException e) {
            // タイムアウト時の処理
            processForTimeOut(url);
        } catch (IOException e) {
            // 例外はここで止める
            WSC.print("going next although IOException at the URL: " + url);
        } catch (Exception e) {
            // 例外はここで止める
            WSC.print("going next although Exception at the URL: " + url);
        } finally {
            if (con != null) {
                con.disconnect();
            }
        }
        return urlsRes;
    }