我有一个用于在UNIX中执行的Curl命令。
curl --digest -u 'user':'pass' 'https://<URL>/getCustomers' (which is working for me)
我试图用Java做这件事。
我尝试使用Restlet和HttpClient,但都没有用。我不知道实现它的确切方法。
private static void get() {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet("https://<URL>/getCustomers");
getRequest.addHeader("accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);
httpClient.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials(USER, PASSWORD));
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpClient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我不知道我在哪里犯了这个错误,你能帮助我吗? 输出是一个JSON,你们能告诉我如何捕获输出吗?
答案 0 :(得分:0)
你的问题遗漏了一些细节,例如你得到的错误。
我建议阅读HTTPClient文档,更具体地说是关于authentication以及抢先工作的部分。
然后,您可以像在
中一样翻转流畅的API,而不是直接处理状态代码和实体Executor executor = Executor.newInstance()
.auth(new HttpHost("example.com"), "username", "password")
.authPreemptive(new HttpHost("example.com"));
executor.execute(Request.Get("http://example.com/foobar.json"))
.returnContent().asString();