Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将用户名传递给HttpGet请求_Java_Http_Http Headers_Http Get - Fatal编程技术网

Java 将用户名传递给HttpGet请求

Java 将用户名传递给HttpGet请求,java,http,http-headers,http-get,Java,Http,Http Headers,Http Get,我需要访问一个API,其工作原理如下: curl https://api.com/ratings/v1/ -u [your token here]: toesGet.addHeader("Username", "[your token here]"); 令牌是应传递给HttpGet请求的用户名。我正在尝试使用java以以下方式执行相同的操作: CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); c

我需要访问一个API,其工作原理如下:

curl https://api.com/ratings/v1/ -u [your token here]:
toesGet.addHeader("Username", "[your token here]");
令牌是应传递给
HttpGet
请求的用户名。我正在尝试使用java以以下方式执行相同的操作:

CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("usrname", "passwrd"));
HttpHost proxy = new HttpHost("proxy.com", 8080, "http");
HttpClient httpClient = HttpClients.custom().setProxy(proxy).setDefaultCredentialsProvider(credentialsProvider).build();

HttpGet toesGet = new HttpGet("https://api.com/ratings/v1/");

    toesGet.setHeader("Accept", "Application/Json");
    toesGet.addHeader("Username", "[your token here]");

    try {
        HttpResponse toes = httpClient.execute(toesGet);
        System.out.println(toes.getStatusLine());
        System.out.println(toes.getEntity().toString());

    } catch (Exception e) {
        e.printStackTrace();
    }
我是后台代理,因此我正在使用代理详细信息创建一个
HttpHost
,为
HttpClient
对象设置代理,并使用
credentialsProvider
在以下代码行中传递代理身份验证的凭据:

HttpHost proxy = new HttpHost("proxy.com", 8080, "http");
HttpClient httpClient = HttpClients.custom().setProxy(proxy).setDefaultCredentialsProvider(credentialsProvider).build();
我通过添加
标题将
用户名
传递给
HttpGet
,如下所示:

curl https://api.com/ratings/v1/ -u [your token here]:
toesGet.addHeader("Username", "[your token here]");
当我运行代码时,我得到以下响应:
HTTP/1.1

这表明我没有以正确的方式将
username
传递给
HttpGet
请求(或者这是否意味着其他什么?)。那么,将用户名传递给get请求的正确方法是什么

任何帮助都将不胜感激,谢谢


注意:凭证提供程序中设置的
usrname
passwrd
用于代理身份验证。它们与HttpGet请求本身无关。我需要传递的令牌与凭据中提供的
usrname
不同。

我想,您的服务器使用基本身份验证,然后您需要添加“Authorization”头而不是“Username”:

或者,如果您的令牌包含user和pwd,则可以这样尝试:

String token = "[your token here]";
toesGet.addHeader("Authorization", "Basic " + Base64.encodeToString(token.getBytes(), Base64.NO_WRAP));

我没有使用Apache HttpComponents,但我的理解是您必须为特定主机设置凭据:

CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
HttpHost proxy = new HttpHost("proxy.com", 8080, "http");
credentialsProvider.setCredentials(new AuthScope(proxy),
    new UsernamePasswordCredentials("usrname", "passwrd"));
credentialsProvider.setCredentials(new AuthScope("api.com", AuthScope.ANY_PORT),
    new UsernamePasswordCredentials("apiuser", "apipassword"));

注意:不要在代码中实际键入“apiuser”或“apipassword”。我只是将它们显示为占位符。用访问api.com的正确用户和密码替换它们。(我指出这一点是因为,根据你问题中的代码,我不确定你是否理解不应该使用文本字符串
“[你的令牌在这里]”

调用
setDefaultCredentialsProvider
就足够了,假设你的用户名和密码是正确的。据我所知,
Username
根本不是一个有效的标题,所以它可能什么都没做。谢谢你的评论。在
credentialsProvider
中设置的
用户名
密码
用于代理身份验证。它们与HttpGet请求本身无关@谢谢你的回答。我试图在我的代码中使用上述行,但我得到了以下错误:
java:找不到符号符号:变量NO\u WRAP location:class jodd.util.Base64
。我试图删除
Base64.NO\u WRAP
,但我得到了
java.lang.ClassNotFoundException:jodd.util.Base64
。我非常确定我已经为该类添加了maven依赖项。我还尝试像这样完全删除Base64:
toesGet.addHeader(“授权”,“基本”+”标记“+”)我仍然得到
未经授权的
响应。我没有为令牌创建变量,直接以字符串形式输入。谢谢您的回答。我试着按照你的建议去做。但是我仍然得到了相同的
未经授权的
响应。最初我以错误的方式给出了
Authscope
。现在更正它,它正在工作!非常感谢!:)