2009-11-24 161 views
1

我有一些应该连接到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())); 
+0

你确定用户名和密码是参数吗?通常(特别是在安全的情况下)有请求标题。 – Trick 2009-11-24 14:43:03

+0

但是,当我尝试通过浏览器连接到此资源时,一切正常。例如: 如果查询= https://开头的URL/WebHome 数据=用户名=测试与密码=测试 的https:// URL/WebHome用户名=测试与密码=测试 – 2009-11-24 14:51:34

+0

我已经试过这样, connection.addRequestProperty(”用户名“,登录); connection.addRequestProperty(“password”,password); 但同样的问题... – 2009-11-24 15:13:57

回答

1

看起来你不能做你想做的事情,你会得到一个HTTP 403: Forbidden

你能在浏览器中打开相同的URL吗?

+0

有趣的事情,我可以在浏览器中打开它 而我发现,实际上,如果我尝试connection.connect(); 然后连接变量是假的... – 2009-11-24 14:44:01

1

我认为该网站有一个自定义的身份验证机制,在此你必须提供我们的用户名和密码作为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对象,如果你已经有一个?

+0

它不工作(( BTW:为什么是U创建一个新的URL对象,如果你已经有了一个 >>我只有一个URL对象 - > queryURL – 2009-11-24 15:35:32

+0

?然而,Salandur可能是正确的,您正在向服务器发出GET请求,但是尝试将请求参数写入请求主体,通常只有POST请求支持该请求参数。 – jarnbjo 2009-11-24 16:40:43

+0

@Le_Coeur:您必须拥有另一个请求参数你正在调用String query = siteURL.toExternalForm(); – Salandur 2009-11-25 09:51:21