【发布时间】:2018-12-18 16:01:49
【问题描述】:
编辑: 好的,我发现这绝对是一个身份验证问题: 这个简短的 Python 脚本做得很好:
import requests
from requests.auth import HTTPBasicAuth
URL = "https://wiki.myCompany.corp/confluence-dev/rest/api/content/180158489";
r = requests.get(URL, auth = HTTPBasicAuth('myUser', 'myPass'), verify=False)
r.raise_for_status()
print(r.json())
为什么它不适用于 Java??
最初的问题:
我正在尝试使用 Apache httpclient/httpcore 编写一个简单的 Http 请求来获取 Confluence 页面的内容,但我得到的只是状态 404。
这是我的代码:
String url = "https://wiki.mycompany.corp/confluence-dev/rest/api/content/180158489";
HttpHost proxy = new HttpHost("proxy.myCompany.at", 57165);
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("myUsername", "myPassword");
provider.setCredentials(AuthScope.ANY, credentials);
HttpClientBuilder builder = HttpClientBuilder.create();
builder.setDefaultCredentialsProvider(provider);
builder.setRoutePlanner(routePlanner);
HttpClient client = builder.build();
HttpGet get = new HttpGet(url);
HttpResponse r = client.execute(get);
System.out.println(r.getStatusLine().toString());
输出: HTTP/1.1 404 未找到
当我在浏览器中打开该 URL 时,只要我已登录,我就会返回正确的 confluence JSON。当我注销并尝试在浏览器中打开该 URL 时,我会得到一个 JSON
{
"statusCode":404,
"data":
{
"authorized":false,
"valid":true,
"allowedInReadOnlyMode":true,
"errors":[],"successful":false
},
"message":"No content found with id: ContentId{id=180158489}",
"reason":"Not Found"
}
所以在我看来,我的代码中的身份验证以某种方式无法正常工作。
您有什么想法吗?
【问题讨论】:
-
尝试直接在浏览器(chrome 等)上打开 url,看看你得到了什么。看起来资源不存在。打开这个网址wiki.mycompany.corp/confluence-dev/rest/api/content/180158489
-
嗯,这就是我的意思:如果我登录到 Confluence,那么我就可以看到资源。我没有登录,然后我得到了 404-JSON
标签: java authentication confluence confluence-rest-api