通过https连接到网站
问题描述:
我有一些应该连接到https网站,并接收一些。 随着连接一切正常,但是当我什么的getInputStream()来异常:通过https连接到网站
产生java.io.IOException:服务器返回的HTTP响应代码:403网址:
这里是代码的一部分:
String query = siteURL.toExternalForm();
URL queryURL = new URL(query);
String data = "username="+login+"&password="+password;
URLConnection connection = queryURL.openConnection();
connection.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(connection
.getOutputStream());
writer.write(data);
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
答
看起来你不能做你想做的事情,你会得到一个HTTP 403: Forbidden。
你能在浏览器中打开相同的URL吗?
+0
有趣的事情,我可以在浏览器中打开它 而我发现,实际上,如果我尝试connection.connect(); 然后连接变量是假的... – 2009-11-24 14:44:01
答
我认为该网站有一个自定义的身份验证机制,在此你必须提供我们的用户名和密码作为GET参数。因此,您的网址应如下所示:
URL url = new URL("http://somesite.org/page?username=<username>&password=password");
... = url.openConnection();
...
如果使用url.openConnection,则会完成HTTP GET请求。如果您想要通过请求发送数据,则必须使用HTTP POST请求。在这种情况下,您可以使用第三方库,如Apache Commons HttpClient。
顺便说一句:为什么你创建一个新的URL对象,如果你已经有一个?
你确定用户名和密码是参数吗?通常(特别是在安全的情况下)有请求标题。 – Trick 2009-11-24 14:43:03
但是,当我尝试通过浏览器连接到此资源时,一切正常。例如: 如果查询= https://开头的URL/WebHome 数据=用户名=测试与密码=测试 的https:// URL/WebHome用户名=测试与密码=测试 – 2009-11-24 14:51:34
我已经试过这样, connection.addRequestProperty(”用户名“,登录); connection.addRequestProperty(“password”,password); 但同样的问题... – 2009-11-24 15:13:57