URLが存在するか調べる方法

URLがネットワーク上に存在するかどうかを調べるには実際にURLに接続してそのメッセージに「200 OK」が含まれていれば存在していることが分かります。

プロジェクトファイルの設定

URLを確かめるにはネットワークモジュールを追加する必要があります。

なのでプロジェクトファイル(.pro)のQTにnetworkを追加すればネットワーク関係が使えるようにします。

QT       += core\
            gui\
            network

プロジェクトファイルの設定はこれだけです。

URLが存在するか調べる

URLへの接続してメッセージを受け取るのにはQTcpSocketを使い、受信したメッセージに「200 OK」が含まれていればURLが存在することになります。

そこでURLが存在する場合だけtrueを返す関数を作ってみました。

bool fileExist(const QUrl & url)
{
    QTcpSocket socket;
    socket.connectToHost(url.host(), 80);
        ///80番ポートに接続
    if(socket.waitForConnected()){
        socket.write("HEAD " + url.path().toUtf8() + " HTTP/1.1\r\n"
                "Host: " + url.host().toUtf8() + "\r\n\r\n");
        if(socket.waitForReadyRead()) {
            QByteArray bytes = socket.readAll();
            if (bytes.contains("200 OK"))
                return true;
        }
    }
    return false;
}

使い方は簡単で例えば次のようにURLを渡してください。

if(fileExist(QUrl("https://www.google.co.jp/"))){
    ///URLが存在する
}else{
    ///存在しない
}
関連項目
プライバシーポリシー