我正在编写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); 参考方案 对于此简单示例,在内存分配方面没有区别。