1

認証が必要なWebサイトSocialcastからコンテンツを取得しようとしています。(最初に基本認証を使用してHTTP POSTを実行し、次にHTTP GETを試行します)。いくつかのコードを試しましたが、これを「結果」として受け取ります:

emily@socialcast.com:demo Base64でエンコードされた認証文字列:ZW1pbHlAc29jaWFsY2FzdC5jb206ZGVtbw == * BEGINリダイレクトされ ています。 終わり *

HTTP基本認証のコードは次のとおりです。

try {
        String webPage = "http://demo.socialcast.com";
        String name = "emily@socialcast.com";
        String password = "demo";

        String authString = name + ":" + password;
        System.out.println("auth string: " + authString);
        byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
        String authStringEnc = new String(authEncBytes);
        System.out.println("Base64 encoded auth string: " + authStringEnc);

        URL url = new URL(webPage);
        URLConnection urlConnection = url.openConnection();
        urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
        InputStream is = urlConnection.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);

        int numCharsRead;
        char[] charArray = new char[1024];
        StringBuffer sb = new StringBuffer();
        while ((numCharsRead = isr.read(charArray)) > 0) {
            sb.append(charArray, 0, numCharsRead);
        }
        String result = sb.toString();

        System.out.println("*** BEGIN ***");
        System.out.println(result);
        System.out.println("*** END ***");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

ただし、後でGETを実行しようとすると、「無許可」と表示されます。クレデンシャルはemily@socialcast.com/demoです。自分のSocialcastインスタンスにもアクセスできないため、現時点ではSocialcastDevから提供されています。
このコードは間違っていますか?どうすれば適切に行うことができますか?ところで、私はHttpClient4.xを使用しています。

4

2 に答える 2

2

各リクエストでクレデンシャルを送信していますか?これが必要だと思います。そうしないと、サーバーには、他のページを表示する権限がまだあることを証明する他の情報がありません...

于 2013-01-17T09:43:54.427 に答える
0

サンプルコードで使用されていないのに、なぜこの質問が実際、httpclientを使用している場合は、認証を非常に簡単に処理できるようになります。優れたチュートリアルについては、こちらを参照してください

于 2013-01-17T09:56:39.480 に答える