0

我已经用 PHP 5.3 以及 SQL Server 配置了 IIS 8.0。

我不确定出了什么问题。当我在浏览器中输入 URL 时,我可以在 Web 浏览器中看到我的 JSON 字符串,

但是当我将它传递给下面的代码时,它返回给我

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

确保您进行身份验证的帐户有权访问网站目录中的文件。

于 2013-01-31T07:41:02.633 回答
0

Internet Explorer 是唯一使用开箱即用的集成模式进行 NTLM 身份验证的浏览器,这就是您的 URL 在您的“浏览器”中工作的原因。您的 Java HttpClient 必须明确地进行身份验证并回答来自服务器的 NTLM 质询。请参阅HttpClient NTLM 身份验证

NTLM 是 HttpClient 支持的最复杂的身份验证协议。它是由 Microsoft 设计的专有协议,没有公开可用的规范... NTLM 身份验证要求 NTCredentials 实例可用于服务器的域名或默认凭据。请注意,由于 NTLM 不使用领域的概念,因此 HttpClient 使用服务器的域名作为领域的名称。另请注意,提供给 NTCredentials 的用户名不应以域为前缀 - 即:“adrian”是正确的,而“DOMAIN\adrian”是不正确的......
HttpClient 对早期版本 NTLMv1 提供有限的支持NTLM 协议。HttpClient 根本不支持 NTLMv2

重要的是 HttpClient 不支持集成身份验证。您必须提供显式凭据,这使得它始终会探查不良做法,因为需要显式提供帐户密码。确保您不存储它而是向用户询问它,这与 Firefox 在访问请求 NTLM 质询的站点时所做的非常相似。

阅读NTLM 身份验证协议和安全支持提供程序了解更多详细信息。

于 2013-01-31T08:37:30.730 回答