如何使用java对HTTP服务器进行授权

如何使用java对HTTP服务器进行授权,java,http,Java,Http,我手动执行的操作: 我打开URL:输入登录名和密码 然后单击按钮,它实际上是执行http get请求: 我在java中的工作: String addr = "http://localhost:8080/rest/platform/domain/list?_dc=1325843792402"; //"http://localhost:8080/webadmin/index.html"; URL url = new URL(addr); HttpURLConnection httpCon = (H

我手动执行的操作:

  • 我打开URL:输入登录名和密码
  • 然后单击按钮,它实际上是执行http get请求:
  • 我在java中的工作:

    String addr = "http://localhost:8080/rest/platform/domain/list?_dc=1325843792402"; //"http://localhost:8080/webadmin/index.html";
    
    URL url = new URL(addr);
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
    httpCon.setDoOutput(true);
    httpCon.setDoInput(true);
    httpCon.setUseCaches(false);
    httpCon.setAllowUserInteraction(false);
    httpCon.setRequestMethod("GET");
    OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());
    
    System.out.println(httpCon.getResponseCode());
    System.out.println(httpCon.getResponseMessage());
    out.close();
    
    并获得响应:
    401未经授权


    原因可以理解:我应该通过输入登录名和密码来创建授权连接。但我怎么能做到这一点呢

    这取决于身份验证方案。有几种可能性,包括

    服务器将在其401答案中告诉您正确的方案。在答案中查找
    WWW-Authenticate
    HTTP头


    要在Java中执行HTTP身份验证,请参阅其中包含大量有用信息。

    关于使用网页中的表单字段进行身份验证,会发生以下情况:

  • 您可以访问登录页面。服务器使用以下方法之一标记您的会话:
    • 会话cookie,出现在HTTP响应头中。您应该存储此cookie,然后重新发送
    • 重定向到标记会话的新URL(http://localhost:8080/?sessionKey=3292n9fafjwagwao2903j2fswioanw)
    • (有时)隐藏的HTML表单或Javascript变量,其中包含会话键,并在每次单击链接时发布
  • 让我们假设服务器使用cookie。然后执行一个POST请求,其中包含:
    • 你收到的饼干
    • 在POST数据中输入您的用户名和密码
  • 服务器现在将您的会话标记为“已登录”,甚至可能会给您一个新的或额外的会话标识符
  • 然后访问一个安全资源,提供一个会话标识符来证明您已登录
  • 您可以使用GoogleChromeDeveloperNetwork视图(按CTRL+SHIFT+J,转到网络)很好地遵循这个过程

    如何将其转换为Java代码

  • 执行登录页面的初始请求。从HTTP头恢复会话cookie
  • 向登录表单目标发送帖子。在HTTP请求标头中包含会话cookie,在帖子数据中包含用户名/密码。从HTTP标头恢复会话cookie
  • 现在访问受保护的资源。在HTTP请求头中包含会话cookie

  • 当然,还有其他在Web服务器级别对用户进行身份验证的方法(HTTP基本身份验证、NTLM…,如本文其他答案所述)。上述方法仅适用于基于HTML表单的身份验证(Facebook、Dropbox…和几乎所有主要网站都使用)

    Manish的副本,谢谢,您的评论对我很有帮助。如果您使用firefox,请使用
    Live HTTP Headers::Add-ons for firefox