【问题标题】:URLConnection in java using username, password, tokenjava中的URLConnection使用用户名、密码、令牌
【发布时间】:2013-11-01 10:42:27
【问题描述】:

我正在尝试使用 URLConnection 连接到 url,在 java 中使用用户名和密码。 这是我正在使用的以下代码:

package com.nivi.org.client;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import com.sun.jersey.core.util.Base64;

public class GetURLContent {
    public static void main(String[] args) {

        URL url;

        try {

            url = new URL("http://sampleurl.co.uk");

            URLConnection conn = url.openConnection();


            String username = "username";
            String password = "password";
            String Token = "zzzzzzzzzzzzzzzzzzzzz";


            System.setProperty("http.proxyHost", "proxyhostname");
            System.setProperty("http.proxyPort", "8080");


            String userpass = username + ":" + password;
            String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
            conn.setRequestProperty ("Authorization", basicAuth);
            conn.setRequestProperty ("Token", Token);


            BufferedReader br = new BufferedReader(
                               new InputStreamReader(conn.getInputStream()));

            System.out.println("br............."+br.toString());

            br.close();

            System.out.println("Done");

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

======================================= 我收到以下错误

java.io.IOException: Server returned HTTP response code: 403 for URL:
http://sampleurl.co.uk
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625)
    at com.nivi.org.client.GetURLContent.main(GetURLContent.java:63)

========================================

首先我的问题是 以下代码中的这些行是否正确?

  conn.setRequestProperty ("Authorization", basicAuth);
  conn.setRequestProperty ("Token", Token);

【问题讨论】:

  • 我可以知道您使用 HHTP 或 https 的协议,并且您仅传递用户名,因此您应该传递包含 passowrd 的用户名,出于身份验证的目的,我们应该传递这两个值。
  • 您应该为此使用java.net.Authenticator
  • @savan 阅读代码。他都通过了,HTTP 或 HTTPS 没有区别。

标签: java passwords token urlconnection


【解决方案1】:

以下代码中的这些行是否正确?

这取决于您访问的实际网站如何实现其用户身份验证。

您所做的似乎是 HTTP 基本身份验证(即 Authorization 标头)和涉及称为 Token 的非标准标头的组合。如果网站支持基本身份验证,这可能就足够了。


您可能应该阅读网站的程序员文档,了解他们的 Web API 是如何工作的。如果没有任何此类文档可供您使用,请使用您的浏览器 Web 开发工具来识别您通过 Web 浏览器登录时站点使用的机制……并尝试让您的客户端以相同的方式运行。


需要注意的一点是,在 HTTP 请求中发送基本授权响应是不安全的。如果可以,请使用 HTTPS 请求。

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 2014-12-24
    • 2018-01-23
    • 2015-03-09
    • 2019-12-25
    • 1970-01-01
    • 2011-12-02
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多