async-http java_使用Java和async-http-client通过基本身份验证获取URL内容 - java

壤驷阳冰
2023-12-01

我正在编写Java库,需要执行对URL的请求-当前使用ning中的async-http-client-并获取其内容。所以我有一个get方法返回一个String

所获取文档的内容。但是,要获得它,我必须执行HTTP基本身份验证,而我的Java代码中却没有成功:

public String get(String token) throws IOException {

String fetchURL = "https://www.eventick.com.br/api/v1/events/492";

try {

String encoded = URLEncoder.encode(token + ":", "UTF-8");

return this.asyncClient.prepareGet(fetchURL)

.addHeader("Authorization", "Basic " + encoded).execute().get().getResponseBody();

}

}

该代码没有返回错误,只是由于某种原因未正确设置身份验证头而未获取URL。

使用curl -u选项,我可以轻松获得所需的内容:

curl https://www.eventick.com.br/api/v1/events/492 -u 'xxxxxxxxxxxxxxx:'

返回值:

{"events":[{"id":492,"title":"Festa da Bagaceira","venue":"Mangueirão de Paulista",

"slug":"bagaceira-fest", "start_at":"2012-07-29T16:00:00-03:00",

"links":{"tickets":[{"id":738,"name":"Normal"}]}}]}

用Java如何做到这一点?使用async-http-client lib?或者,如果您知道如何使用其他方法。

欢迎任何帮助!

参考方案

你近了您需要基于64编码而不是URL编码。也就是说,您需要

String encoded = Base64.getEncoder().encodeToString((user + ':' + password).getBytes(StandardCharsets.UTF_8));

而不是

String encoded = URLEncoder.encode(token + ":", "UTF-8");

(请注意,为了他人的利益,自从我2年后回答以来,我在回答中使用的是更标准的"user:password",而您的问题是"token:"。如果您需要的是"token:",请坚持这样做。但这也许也是问题的一部分吗?)

这是一个简短,自成体系的正确示例

package so17380731;

import com.ning.http.client.AsyncHttpClient;

import java.nio.charset.StandardCharsets;

import java.util.Base64;

import javax.ws.rs.core.HttpHeaders;

public class BasicAuth {

public static void main(String... args) throws Exception {

try(AsyncHttpClient asyncClient = new AsyncHttpClient()) {

final String user = "StackOverflow";

final String password = "17380731";

final String fetchURL = "https://www.eventick.com.br/api/v1/events/492";

final String encoded = Base64.getEncoder().encodeToString((user + ':' + password).getBytes(StandardCharsets.UTF_8));

final String body = asyncClient

.prepareGet(fetchURL)

.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoded)

.execute()

.get()

.getResponseBody(StandardCharsets.UTF_8.name());

System.out.println(body);

}

}

}

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…Java RegEx中的单词边界\ b - java

我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…字符串内存分配 - java

哪一个更好System.out.println("hello world"); 要么String s="hello world"; System.out.println(s); 参考方案 对于此简单示例,在内存分配方面没有区别。

 类似资料: