0

コード 200 (ページが存在します) で応答する場合、Java を使用して Web ページが存在するかどうかを調べようとしています。

応答コード 404 を取得することで、ページが (存在しない) かどうかを確認することもできます。以下のサンプルで提供されているように存在します。

これは、html 応答コードまたは Java について十分に知らないためかどうかはわかりません。

これらのページで 200 の代わりにエラー コードを取得したり、例外をキャッチしたりするのに役立ちます。(私が意味をなさない場合は申し訳ありません)。

public class TestMain {

public static void main(String[] args) {

    Test test = new Test();
    test.UrlCheck();        
}
}

テストクラス

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

public class Test{

public void UrlCheck(){ 

    try{    
    URL url = new URL("http://googlewebmastercentral.blogspot.com.au/5000");
    HttpURLConnection urncon = (HttpURLConnection)url.openConnection (); 
    urncon.setRequestMethod ("HEAD"); 
    urncon.connect(); 

    int code = urncon.getResponseCode();    
    if(code == 200)
    System.out.println("Page Found");

    }catch(MalformedURLException mue){
        mue.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}       
}
4

6 に答える 6

0

一部のサイトでは tjis を実行できないと思います。それらのサイトにはカスタム 404 ハンドラがあり、そこに「見つかりません」にリダイレクトするページがあります (グッド プラクティス)。この場合、404 eill は返されませんが、有効なページです。

于 2013-03-29T04:12:14.760 に答える
0

サイトが 404 を処理する方法によっては、目的を達成する確実な方法はありません。単純にそれを抑制して、カスタム応答を提供する場合があります。

于 2013-03-29T04:14:32.643 に答える
0

200 が返された場合、そのページは存在します。それを Web マスターが選択した場合、それをキャッチする一般的な方法は実際にはありません。

于 2013-03-29T04:16:03.277 に答える
0

ほとんどのサイトは、「ページが見つかりません」というエラーに対して 404 を送信します。応答を変更する場合、200 が成功のためであるため、200 に設定される可能性はほとんどありません。

しかし、他の人がマークしているように、サイトの所有者が他の人に通知しない限り、コードでこれを特定することはできません。

于 2013-03-29T21:21:05.037 に答える
0

私の問題は、一部のサイトが 404 を返さず、リダイレクトするか、本来あるべきではないページを表示することです...

... ステータス コード 200 の場合。

これに対する一般的な解決策はありません。

Web サイトが存在しないページに対して 3xx または 200 で応答することを選択した場合、応答ページを「実際の」ページと区別する一般的な方法はありません。実際、応答ページは「実際の」ページと見分けがつかない場合があります...人間にとっても.

期待できる最善の方法は、クロールしている特定のサイト (または複数のサイト) の動作を認識するようにアプリケーションをコーディングすることです。たとえば、応答ページで特徴的な文字列を探します。

于 2013-03-29T05:13:04.037 に答える
0

問題のサイトはページが存在すると言っているので、それについてできることはあまりありません. 特定のサイトのみの場合は、応答本文で、条件に一致しないことを示すもの (「投稿なし」など) を検索することをお勧めします。http://googlewebmastercentral.blogspot.com.au/500067890にアクセスすると 404 が表示されるので、サンプル ページは本当に存在するのでしょうか?

// lazy and untested example. Can't remember if getContentEncoding gives character encoding

String charset = urncon.getContentEncoding();
if (charset == null) {
    // Sane default
    charset = "UTF-8";
}
String data = org.apache.commons.io.IOUtils.toString(urncon.getInputStream(), charset);
if (!data.contains("foobar")) {
    throw new IOException("Site not liked");
}

編集: IOUtils のパッケージ名を追加し、メソッド名を修正しました。

于 2013-03-29T04:13:44.157 に答える