背景:
我们有一个基于Desktop Java的应用程序,该应用程序调用托管在其他服务器上的ASPX页面,该服务器不需要身份验证。
已完成试用:
我已经使用RESTClient触发了相同的操作;我看到请求已发送到网站。
代码示例:
//Create connection
url = new URL(targetURL);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/xml");
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
OutputStreamWriter out;
out = new OutputStreamWriter(connection.getOutputStream());
out.write("<?xml version=\"1.0\"?>\r\n");
out.write("<methodCall>\r\n");
out.write(" <project>" + "<![CDATA["+"Pla"+"]]>" + "</project>\r\n");
out.write("</methodCall>\r\n");
确切错误:
java.io.IOException: Server returned HTTP response code: 401 for URL:
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$10.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
能帮我解决这个问题吗?
以下是这两个JRE的一些内容: JRE_1.8.0_201: 2019年3月27日下午1:20:45 sun.net.www.protocol.http.HttpURLConnection getServerAuthentication FINER:AuthenticationHeader的服务器身份验证:首选NTLM返回null
JRE_1.8.0_131: ar 27,2019 11:28:35 AM sun.net.www.protocol.http.HttpURLConnection getServerAuthentication FINER:AuthenticationHeader的服务器身份验证:首选NTLM返回的sun.net.www.protocol.http.ntlm.NTLMAuthentication@728938a9 2019年3月27日11:28:35 am sun.net.www.protocol.http.HttpURLConnection plainConnect0
答案 0 :(得分:0)
我建议您检查User-Agent标头的值。例如,尝试将其设置为“ Mozilla / 5.0”。
答案 1 :(得分:0)
我们在HttpURLConnection和这个特定的1.8.0_201 jre上遇到了类似的问题,该问题带有失败的身份验证和“ Authentication:Basic xxyyy”标头。 我们的情况是服务器首先回答“ 301永久移动”,并且httpurlconnection使用新提供的url正确地重试了请求,但是缺少“ Authentication”标头,因此我们遇到了401。
有趣的事实:像这样设置标题时:
MyLib_Init(1, 2, &(MyLib_InitOptArgs_T){ .optArg2=1.2f });
(请参阅标头名称后的附加空间),它可以工作,因此我认为“ Authentication”标头的过滤器是预期的行为,并且实施不当;-)