我在Eclipse中使用默认的API通过HTTPS连接到服务器。我已将链接证书安装在我的密钥库中。但是,Windows不喜欢它,并抛出一个certificate chaining error
。在Ubuntu上,它实际上运行得很好!
现在,在Windows上,我看到了一个"破解",它基本上创建了一个启用所有证书的TrustManager
。就目前而言,这还可以。稍后我将不得不回到它,但是,我目前的问题是,我的代码连接到服务器,使用uc.setRequestProperty("Authorization", "Basic " + encodedLogin);
进行身份验证,但返回表单的HTML代码,我实际上认为我一开始就登录了表单。如果没有那条线,我会得到403
。
当我在浏览器中访问该网站时,弹出了一个登录框。当我登录时,它没有给我任何问题。当我单击Cancel
并取消登录框时,它将我带到代码返回的HTML表单。所以要么我需要以某种方式登录到这个弹出框,要么我需要第二次身份验证才能登录到网络表单。我希望这是一个足够清楚的解释。
我的最终目标显然是登录并将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 Web表单
<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>
HTTP授权与登录web表单不是一回事。
您已经获得了HTTP授权(即修复了403错误),因此您将获得所请求的页面,即登录页面。HTML显示,为了登录表单,您需要在/mlogin.form URL上执行POST。目前,您正在对登录页面的URL进行GET操作。
服务器具有两个不同的并行身份验证过程是不常见的。服务器可能配置错误。