我正在尝试使用以下代码从Zimbra下载联系人:
public static void getHTTPFile() {
HttpClient client = new HttpClient();
List<String> authPrefs = new ArrayList<String>(2);
authPrefs.add(AuthPolicy.DIGEST);
authPrefs.add(AuthPolicy.BASIC);
client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
client.getState().setCredentials(
new AuthScope(HOST, new Integer(PORT).intValue(), AuthScope.ANY_REALM),
new UsernamePasswordCredentials(NAME, PASSWORD)
);
GetMethod get = new GetMethod("http://"+HOST+":"+PORT+"/home/"+USER+"/contacts?fmt=csv");
get.setDoAuthentication(true);
try {
int status = client.executeMethod(get);
System.out.println(status + "\n" + get.getResponseBodyAsString());
} catch (IOException e) {
e.printStackTrace();
} finally {
get.releaseConnection();
}
}
但我收到错误404(未找到):
13 juin 2012 08:40:47 org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: Basic authentication scheme selected
404
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 404 no such item</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /service/home/USER/contacts. Reason:
<pre> no such item</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>
我的网址错了吗?关于documentation似乎没有。
身份验证有问题吗?我没有收到错误401(未经授权)。
有什么想法吗?
感谢您的帮助。
修改
Zimbra在服务器端是否有限制?例如,我们只能通过网络浏览器或智能手机访问它。
答案 0 :(得分:1)
我对Zimbra没有任何线索,但在您的网址"http://"+HOST+":"+PORT+"/home/"+USER+"/contacts?fmt=csv"
中,USER
var应该被真实的用户名替换为bob
。但在404响应中,您要求的网址是:/service/home/USER/contacts
。在我看来,您想要请求来自用户USER
的联系人,并且没有此用户使用此名称。是不是?
答案 1 :(得分:1)
在REST服务中,HTTP消息是协议的一部分,404可能意味着服务没问题,但找不到您的用户。你试过其他用户吗?或者也许你可以在api上有一个默认的测试用户。