我使用Eclipse中的默认API通过HTTPS连接到服务器。我在我的密钥库中安装了链式证书。但是,Windows不喜欢它并引发certificate chaining error
。在Ubuntu上,它实际上运行正常!
现在,在Windows上我有一个“hack”,我在这里看到它基本上创建了一个TrustManager
来启用所有证书。目前,这很好。我将不得不稍后回到它,但是,我当前的问题是我的代码连接到服务器,使用uc.setRequestProperty("Authorization", "Basic " + encodedLogin);
进行身份验证但返回我的表单的HTML代码,我实际上认为我正在登录首先。如果没有这一行,我会得到403
。
当我在浏览器中访问该网站时,会弹出一个登录框。当我登录时,它没有任何问题。当我单击Cancel
并关闭登录框时,它将我带到了我的代码返回的确切HTML表单。所以要么我需要以某种方式登录到这个弹出框,要么我需要第二次验证登录到Web表单。我希望这是一个明确的解释。
我的最终目标显然是登录并将auth对象返回给我的代码,以便与网站进行进一步的通信。我只是被困在这个小小的傻瓜身上好几天了!非常感谢任何帮助!!
我附上了我的代码,以及HTML表单的代码。
感谢。
我的代码:
try
{
String login = "MyUser:MyPass";
byte[] encodedLogin = new Base64().encode(login.getBytes());
StringBuilder parsedContentFromUrl = new StringBuilder();
HttpsURLConnection uc = (HttpsURLConnection) webURL.openConnection();
//uc.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);
uc.setRequestProperty("Authorization", "Basic " + encodedLogin);
//uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
uc.connect();
//uc.getInputStream();
BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
//System.out.println(uc.getRequestProperty("WWW-Authenticate"));
int ch;
while ((ch = in.read()) != -1) {
parsedContentFromUrl.append((char) ch);
}
System.out.println(parsedContentFromUrl);
}
catch (IOException e)
{
System.out.println("IOException::"+e.getMessage());
e.printStackTrace();
}
HTML网络表单
<FORM METHOD=POST ACTION="/mylogin.form">
<FONT SIZE="+2">
<TABLE BORDER="0" WIDTH="400">
<TR>
<TD ALIGN="LEFT"><UL><LI>Username</LI></UL></TD>
<TD><INPUT NAME="username" SIZE="15"></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><UL><LI>Password</LI></UL></TD>
<TD><INPUT TYPE="PASSWORD" NAME="password" SIZE="15"></TD>
</TR>
</TABLE>
</FONT>
<INPUT TYPE="HIDDEN" NAME="login-form-type" VALUE="pwd">
<BR><INPUT TYPE="SUBMIT" VALUE="Login">
</FORM>
答案 0 :(得分:2)
HTTP授权与登录Web表单不同。
您已获得HTTP授权(即修复了403错误),因此您将获得所请求的页面,即登录页面。 HTML向您显示,为了登录表单,您需要在/mylogin.form URL上执行POST。目前,您正在对登录页面的URL进行GET。
服务器并行拥有两个不同的身份验证过程是不常见的。服务器可能配置错误。