HttpClient调用.net发布的带Windows NTML验证的webservice

Posted David Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient调用.net发布的带Windows NTML验证的webservice相关的知识,希望对你有一定的参考价值。

技术分享

 

使用HttpClient调用:

先要通过Windows NTML验证,然后才能调用 。

  1 class  WebServiceTest
  2 {
  3     
  4     /**
  5      * 获取接口数据
  6      * @param soapRequest
  7      * @return String
  8      */
  9     public String postSoapRequest(String soapRequest){
 10            CloseableHttpClient httpclient =  HttpClients.createDefault();
 11            //Windows NTLM验证
 12            CredentialsProvider credsProvider = new BasicCredentialsProvider();
 13            credsProvider.setCredentials(AuthScope.ANY,
 14                    new NTCredentials(InterfaceConstants.THE_USERNAME,
 15                            InterfaceConstants.THE_PASSWORD,
 16                            InterfaceConstants.THE_HOST, 
 17                            System.getenv("userdomain")));
 18            HttpHost target = new HttpHost(InterfaceConstants.THE_HOST, 80, "http");
 19            HttpClientContext context = HttpClientContext.create();
 20            context.setCredentialsProvider(credsProvider);
 21            HttpGet httpget = new HttpGet(InterfaceConstants.THE_URL);
 22            CloseableHttpResponse response1 = null;
 23            try {
 24                response1 = httpclient.execute(target, httpget, context);
 25            }catch(Exception e){
 26                e.printStackTrace();
 27            }finally {
 28                try {
 29                    response1.close();
 30                } catch (IOException e) {
 31                    e.printStackTrace();
 32                }
 33            }
 34            //使用相同的上下文,执行重量级的方法
 35            HttpPost httppost = new HttpPost(InterfaceConstants.THE_URL);
 36            HttpEntity re = new StringEntity(soapRequest, "utf-8");  
 37            httppost.setHeader("Content-Type","text/xml; charset=utf-8");
 38            httppost.setEntity(re);          
 39            CloseableHttpResponse response2 = null;
 40            String  result = null;//返回结果
 41            try {
 42                 response2 = httpclient.execute(target, httppost, context);
 43                 HttpEntity entity2 = response2.getEntity();
 44                 if (entity2 != null) {  
 45                    //响应内容  
 46                    result = EntityUtils.toString(entity2, "utf-8");  
 47                    System.out.println("isChunked:"+entity2.isChunked());
 48                 }  
 49            }catch(Exception e) {
 50                 e.printStackTrace();
 51            } finally {
 52                try {
 53                    response2.close();
 54                } catch (IOException e){
 55                    e.printStackTrace();
 56                }
 57            }
 58           return result;
 59     }
 60 
 61 
 62     @Test
 63     public void testHelloWorld()throws Exception {
 64         /*soap请求*/
 65         String soapRequest = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
 66                 +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
 67                 +" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
 68                 +" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
 69                 +" <soap:Body>"
 70                 +"  <HelloWorld xmlns=\"http://tempuri.org/\"/>"
 71                 +"  </soap:Body>"
 72                 +"</soap:Envelope>";
 73         
 74         String res = postSoapRequest(soapRequest);//调用
 75 
 76         /*处理返回的结果*/
 77         Document document = DocumentHelper.parseText(res);
 78         Element root = document.getRootElement();
 79         Element body = root.element("Body");
 80         Element responseEle = body.element("HelloWorldResponse");
 81         Element resultEle = responseEle.element("HelloWorldResult");
 82         System.out.println(resultEle.getData());    
 83     
 84     }
 85 }
 86 
 87 
 88 /**接口相关信息*/
 89 public interface InterfaceConstants {
 90     
 91     public static final String THE_URL = "http://xxxxxxxxervice.asmx";  
 92     /**
 93      * 用户名
 94      */
 95     public static final String THE_USERNAME = "xxxxx";
 96     /**
 97      * 加密后密码
 98      */
 99     public static final String THE_PASSWORD = "xxxxx";    
100     /**
101      * 接口host
102      */
103     public static final String THE_HOST= "xxxxxxxxxxxxx";
104     /**
105      * 接口地址
106      */
107     public static final String THE_URL="http://xxxxxxxxervice.asmx";
108 
109 }

 

以上是关于HttpClient调用.net发布的带Windows NTML验证的webservice的主要内容,如果未能解决你的问题,请参考以下文章

使用 httpClient.postasync 进行 web api 调用 .net core

从 ASP.net 4 Web API 2 项目通过 HttpClient 调用 REST 服务导致异常

在 ASP.NET Core 中有效地转发来自内部 HttpClient 调用的内容

Java.Net.ProtocolException:“意外的状态行:<html>”通过 httpclient 进行连续 api 调用

如何在 .net Core API 项目中跨多个线程限制对 HttpClient 的所有传出异步调用

使用带有 .NET 4.5 HttpClient 的代理