0

IIS 8.0 を PHP 5.3 と SQL Server で構成しました。

何が問題なのかわかりません。ブラウザに URL を入力すると、Web ブラウザに JSON 文字列が表示されます。

しかし、それを以下のコードに渡すと、return me

IIS 8.0 Detailed Error - 401.2 - Unauthorized

私のEclipseの401.2エラーページ。

Windows 認証を介してデータベースに接続しています。そのため、IIS で Windows 認証を有効に設定しました。Windows認証以外の認証はできません.JSONstringはブラウザからもまったく返されません.その場合.

以下のURLに記載されている解決策を試しました

http://support.microsoft.com/kb/942043

問題はまだ続く

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;

public class JSONTester {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) 
    {
        InputStream is = null;
        String json = "";

        try 
        {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://localhost/hive/get_all_products.php");
            httpPost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        System.out.println(json);
    }
}

どんな助けでも素晴らしいでしょう。

ありがとう !!!

4

2 に答える 2

0

Internet Explorerは、すぐに使用できる統合モードを使用してNTLM認証を実行する唯一のブラウザです。これが、URLが「ブラウザ」で機能する理由です。Java HttpClientは明示的に認証し、サーバーからのNTLMチャレンジに応答する必要があります。HttpClientNTLM認証を参照してください。

NTLMは、HttpClientでサポートされている認証プロトコルの中で最も複雑です。これは、Microsoftによって設計された独自のプロトコルであり、公開されている仕様はありません... NTLM認証では、サーバーのドメイン名またはデフォルトの資格情報に使用できるNTCredentialsのインスタンスが必要です。NTLMはレルムの概念を使用しないため、HttpClientはサーバーのドメイン名をレルムの名前として使用することに注意してください。また、NTCredentialsに提供されるユーザー名には、ドメインのプレフィックスを付けないでください。つまり、「adrian」は正しいのに対し、「DOMAIN \adrian」は正しくありません...
HttpClientは、初期バージョンのNTLMv1と呼ばれるものに対して限定的なサポートを提供します。 NTLMプロトコルの。HttpClientはNTLMv2をまったくサポートしていません

持ち帰る重要なことは、HttpClientが統合認証をサポートしていないことです。アカウントのパスワードを明示的に提供する必要があるため、明示的な資格情報を提供する必要があります。これにより、常に不正行為を調査できます。NTLMチャレンジを要求するサイトにアクセスするときにFirefoxが行うのとほぼ同じように、保存するのではなく、ユーザーに尋ねてください。

詳細については、NTLM認証プロトコルとセキュリティサポートプロバイダーをお読みください。

于 2013-01-31T08:37:30.730 に答える
0

認証に使用するアカウントに、Web サイト ディレクトリ内のファイルに対する権限があることを確認してください。

于 2013-01-31T07:41:02.633 に答える