java – 使用NTLM身份验证使用soap服务
发布时间:2020-12-15 02:15:06 所属栏目:Java 来源:网络整理
导读:我试图通过创建NTLM引擎(遵循 http://hc.apache.org/httpcomponents-client-4.3.x/ntlm.html上的说明)来使用NTLM身份验证来使用SOAP服务,实现了AuthSchemeFactory并最终将AuthSchemeFactory注册到我的HTTP客户端.当我使用我的HTTP客户端点击服务时,我得到一
我试图通过创建NTLM引擎(遵循
http://hc.apache.org/httpcomponents-client-4.3.x/ntlm.html上的说明)来使用NTLM身份验证来使用SOAP服务,实现了AuthSchemeFactory并最终将AuthSchemeFactory注册到我的HTTP客户端.当我使用我的HTTP客户端点击服务时,我得到一个响应:“状态代码 – 415,消息 – 服务器无法为请求提供服务,因为媒体类型不受支持.”
任何人都可以告诉我如何解决这个不受支持的媒体问题,以便在Java平台上使用受NTLM保护的SOAP Web服务.使用JCIFS是一个正确的选项来约束NTLM受保护的服务,还是有更好的方法.提前致谢. DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getAuthSchemes().register(AuthSchemes.NTLM,new JCIFSNTLMSchemeFactory()); CredentialsProvider credsProvider = new BasicCredentialsProvider(); NTCredentials ntcred = new NTCredentials("USERNAME","PASSWORD","HOST","DOMAIN"); credsProvider.setCredentials(new AuthScope("HOST",443,AuthScope.ANY_REALM,"NTLM"),ntcred); httpclient.setCredentialsProvider(credsProvider); httpclient.getParams().setParameter( CoreProtocolPNames.HTTP_CONTENT_CHARSET,"UTF-8"); Writer writer = new StringWriter(); writer.write("MY SOAP REQUEST BODY"); HttpPost httppost = new HttpPost( "https://<HOST_NAME>/XiPay30WS.asmx"); httppost.setEntity(new StringEntity(writer.toString())); httppost.setHeader("Content-Type","application/x-www-form-urlencoded"); HttpResponse httpresponse = httpclient.execute( new HttpHost("HOST","https"),httppost,new BasicHttpContext()); String statusCode = httpresponse.getStatusCode(); 解决方法
使用带有FLASK的NTLM Auth实现python实现.
如果你想使用java,运行下面的独立烧瓶代码并通过http请求从java代码调用url(例如POST request / dora / httpWithNTLM) from flask import Flask,render_template,flash,request,url_for,redirect,session,Response import requests,sys,json from requests_ntlm import HttpNtlmAuth app = Flask(__name__) @app.route("/dora/httpWithNTLM",methods=['POST']) def invokeHTTPReqWithNTLM(): url ="" reqData = json.loads(request.data) reqxml=request.data headers = {} headers["SOAPAction"] = ""; headers["Content-Type"] = "text/xml" headers["Accept"] = "text/xml" print("req headers "+str(request.headers)) r = requests.Request("POST",url,auth=HttpNtlmAuth('domainusername','password'),data=reqxml,headers=headers) prepared = r.prepare() s = requests.Session() resp = s.send(prepared) print (resp.status_code) return Response(resp.text.replace("<","<").replace(">",">"),resp.status_code) if __name__ == '__main__': app.run(host="0.0.0.0",port=5001) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |