restTemplate.getForEntity()获取连接超时

时间:2019-08-27 02:38:10

标签: java spring-boot resttemplate

我使用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]

1 个答案:

答案 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);