【问题标题】:401 Unauthorized when calling webservice through javacode通过java代码调用web服务时出现401 Unauthorized
【发布时间】:2017-05-25 13:51:39
【问题描述】:

我必须通过 java 调用 web 服务。当我在浏览器中点击 Web 服务 URL 时,它会询问用户名和密码,我可以看到结果, 但是当我尝试使用 java 代码调用它时,我收到了类似

的错误

您无权查看此页面 BODY { font: 8pt/12pt verdana } H1 { font: 13pt/15pt verdana } H2 { font: 8pt/12pt verdana } A:link { color: red } A:visited {颜色:栗色}

您无权查看此页面

您无权使用您提供的凭据查看此目录或页面,因为您的 Web 浏览器正在发送 Web 服务器未发送的 WWW-Authenticate 标头字段配置为接受。

请尝试以下方法:

  • 如果您认为应该能够查看此目录或页面,请与网站管理员联系。
  • 单击刷新按钮以使用不同的凭据重试。

HTTP 错误 401.2 - 未经授权:访问因服务器配置而被拒绝。
Internet 信息服务 (IIS)


技术信息(供支持人员使用)

  • 转到Microsoft Product Support Services 并执行对HTTP401 词的标题搜索。
  • 打开可在 IIS 管理器 (inetmgr) 中访问的 IIS 帮助,然后搜索标题为 关于安全身份验证 和 关于自定义错误消息。
我无法使用 SOAP UI 访问结果

我真的卡住了,我尝试使用 httpclient/jersey

请帮助我如何使用 java 代码发送用户名和密码

import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.NTCredentials;
import org.apache.http.auth.params.AuthPNames;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.AuthPolicy;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;


public class NTLM_TRY2 {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
          DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpGet httpget = new HttpGet("http://10.0.134.114/eBill/bpsWebService.asmx"); 
            CredentialsProvider credsProvider = new BasicCredentialsProvider();
            credsProvider.setCredentials(AuthScope.ANY,
                    new NTCredentials("abc", "acb@578", "", ""));

                java.util.List<String> authtypes = new ArrayList<String>();
                authtypes.add(AuthPolicy.NTLM);
                authtypes.add(AuthPolicy.DIGEST);
                authtypes.add(AuthPolicy.BASIC);
                httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF,
                        authtypes);
                httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
                        authtypes);

            localContext.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
            HttpResponse response = httpclient.execute(httpget, localContext);
            System.out.println("Response code: " + response.getStatusLine());


    }

}

【问题讨论】:

    标签: web-services jersey-2.0 apache-httpclient-4.x


    【解决方案1】:

    如果是基本身份验证,您必须在请求的标头中向用户发送密码。

    在 SO 中查看这个问题。 Http Basic Authentication in Java using HttpClient?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多