我使用RestTemplate调用远程api获取数据并发生错误java.net.SocketTimeoutException: connect timed out
。但是当我使用邮递员时,我得到了数据(status=200 time=167ms
)
代码如下:
Sting url = "http://XXX.XXX.XXX.XX:8080/api/v1/resources?ak={ak}&ruleno={ruleno}&limit={limit}&offset={offset}&time={time}&ts={ts}&trace_id={trace_id}&sign={sign}";
Map<String, String> urlMap = new HashMap<>();
urlMap.put("ak", ak);
urlMap.put("ruleno", ruleNo);
urlMap.put("limit", limit);
urlMap.put("offset", offset);
urlMap.put("time", time);
urlMap.put("ts", ts);
urlMap.put("trace_id", traceId);
urlMap.put("sign", sign);
ResponseEntity<HashMap> result = restTemplate.getForEntity(url, HashMap.class, urlMap);
错误是:
java.net.SocketTimeoutException:连接超时 在java.net.DualStackPlainSocketImpl.waitForConnect(本地方法)〜[na:1.8.0_191] 在java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)〜[na:1.8.0_191] 在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)〜[na:1.8.0_191]
答案 0 :(得分:0)
我在浏览器中有一个代理,因此可以使用Postman调用api
,但是当我使用Java代码时,我没有代理,因此无法访问api
。
使用此方法解决问题:
SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory();
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("my.proxy.com", 9999));
clientHttpRequestFactory.setProxy(proxy);
RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory);