【问题标题】:Connect to site through https通过 https 连接到站点
【发布时间】:2009-11-24 14:35:08
【问题描述】:

我有一些应用程序应该连接到 https 站点并接收一些。 连接一切正常,但是当我 getInputStream() 出现异常时:

java.io.IOException:服务器返回 HTTP 响应代码:403 for URL:

以下是部分代码:

    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()));

【问题讨论】:

  • 您确定将用户名和密码作为参数吗?通常(尤其是在安全上)请求标头中有。
  • 但是当我尝试通过浏览器连接到这个资源时一切正常。例如:如果查询=url/WebHome数据=用户名=测试&密码=测试url/WebHome?username=Test&password=test
  • 我试过了,connection.addRequestProperty("username", login); connection.addRequestProperty("密码", 密码);但同样的问题......

标签: java https


【解决方案1】:

看起来你不被允许做你想做的事,你得到一个HTTP 403: Forbidden

您可以在浏览器中打开相同的网址吗?

【讨论】:

  • 有趣的是,我可以在浏览器中打开它而且我发现,实际上如果我尝试 connection.connect();那么连接的变量是假的......
【解决方案2】:

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

【讨论】:

  • 它不起作用((顺便说一句:你为​​什么要创建一个新的 URL 对象,如果你已经有一个?>> 我只有一个 URL 对象 -> queryURL
  • Salandur 可能是对的。您正在向服务器发出 GET 请求,但尝试在请求正文中写入请求参数,这通常仅支持 POST 请求。
  • @Le_Coeur:你必须有另一个,因为你正在调用 String query = siteURL.toExternalForm();
  • 我从一开始就删除了一些代码,它是 String query = siteURL.toExternalForm()+"/var/start";
猜你喜欢
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多