【发布时间】:2013-11-03 11:59:15
【问题描述】:
在我的浏览器中,rest API url 工作正常,我可以看到 XML 结果。
"http://V7846EKZZJ1OJAW486D66IS7GO24XKUZ@localhost:8090/prestashop/api/products/1"
我想从 Java 客户端调用这个 url 并获得结果。为此,我正在使用 RestTemplate。
String result = restTemplate.getForObject("http://V7846EKZZJ1OJAW486D66IS7GO24XKUZ@localhost:8090/prestashop/api/products/1"
, String.class);
这是给出以下错误,
WARNING: GET request for http://V7846EKZZJ1OJAW486D66IS7GO24XKUZ@localhost:8090/prestashop/api/products/1 resulted in 401 (Unauthorized); invoking error handler
Disconnected from the target VM, address: '127.0.0.1:49533', transport: 'socket'
org.springframework.web.client.HttpClientErrorException: 401 Unauthorized
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88)
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:537)
不知道为什么会这样。 我们不能用 RestTemplate 以 username@host/appplication 形式调用 URL 吗? 还是我用 RestTemplate 调用这个 URL 的方式不正确?
问候, -Lasith。
【问题讨论】:
-
当您在浏览器中使用该 URL 时会发生什么?看起来它也需要密码,或者其他形式的身份验证?
-
不,它不需要密码。使用浏览器,它会提供 XML 格式的产品信息。
-
嗨,我解决了这个问题。 Spring 测试模板似乎无法识别 username@host/application。所以我们需要手动设置授权。 DefaultHttpClient httpClient = new DefaultHttpClient(); BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user, password)); httpClient.setCredentialsProvider(credentialsProvider);
标签: java spring rest prestashop resttemplate