java.net.URLConnection在这里经常询问使用情况,Oracle教程对此非常简洁.
该教程基本上只显示了如何触发GET请求并读取响应.它没有解释如何使用它来执行POST请求,设置请求标头,读取响应标头,处理cookie,提交HTML表单,上传文件等.
那么,我如何使用java.net.URLConnection触发和处理"高级"HTTP请求?
我正在尝试打开与NTLM身份验证方案保护的URL的http连接.当我们使用Java 6时,这段代码已经正常工作了2年.我写了一个小的java程序,它访问该特定的url,使测试用例尽可能简单.
问题是我无法使程序在Linux上运行,并且在使用JDK 7的版本时.Java尝试20次访问URL,然后我收到一个错误,告诉我服务器重定向次数太多.它适用于linux和JDK 6,以及带有JDK 6或7的Windows 7.
我检查并尝试了此处列出的解决方案(和许多其他人):获取"java.net.ProtocolException:服务器重定向次数太多"错误.它没用.我还要补充一点,当从浏览器访问URL时,我可以看到没有涉及cookie.
以下是我尝试过的os/java版本的确切细节:
成功:
失败:
当程序工作时,我看到使用的身份验证方法和我尝试下载的文档作为输出:
Scheme:Negotiate
Scheme:ntlm
.... document content ....
Done
Run Code Online (Sandbox Code Playgroud)
当它失败时,我有以下输出:
Scheme:Negotiate
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
Scheme:ntlm
java.net.ProtocolException: Server redirected too many times (20)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1635)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) …Run Code Online (Sandbox Code Playgroud)