2017-02-09 13 views
1

Вот кодHTTP POST не работает с кодом, но работая почтальоном

public class PostRequestMain { 

    private static String ReadFile(String path) { 
     String entityBody = new String(); 
     FileReader file; 
     try { 
      file = new FileReader(path); 
      try { 
       entityBody = IOUtils.toString(file); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } catch (FileNotFoundException e1) { 
      e1.printStackTrace(); 
     } 
     return entityBody; 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); 
     Map map = new HashMap<String, String>(); 
     map.put("Content-Type", "text/plain"); 
     map.put("userName", "username"); 
     map.put("password", "pass"); 

     String payLoad = ReadFile("src/main/resources/SamplePayload.html"); 

     headers.setAll(map); 
     HttpEntity<String> requestPayload = new HttpEntity<String>(payLoad,headers); 
     String url = "http://domain/path"; 

     ResponseEntity<String> responseEntity = null; 

     UriComponentsBuilder uriComponents = UriComponentsBuilder.fromHttpUrl(url) 
       .queryParam("param1", "value1"); 

     try { 
      responseEntity = new RestTemplate().postForEntity(uriComponents.build().encode().toUri(), requestPayload, String.class); 
     } catch (HttpStatusCodeException ex) { 
      System.out.println("Status code = " + ex.getStatusCode()); 
     } 

     String entityResponse = responseEntity.getBody(); 
     System.out.println(entityResponse); 
    } 

} 

когда я запускаю выше код дает мне исключение,

Исключение в потоке «главный»

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://domain/path ":Connection reset; nested exception is java.net.SocketException: Connection reset 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:503) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:465) 
    at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:342) 
    at sprinthttp1.PostRequestMain.main(PostRequestMain.java:61) 
Caused by: java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(SocketInputStream.java:209) 
    at java.net.SocketInputStream.read(SocketInputStream.java:141) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1536) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) 
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) 
    at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:47) 
    at org.springframework.http.client.AbstractClientHttpResponse.getStatusCode(AbstractClientHttpResponse.java:32) 
    at org.springframework.web.client.DefaultResponseErrorHandler.getHttpStatusCode(DefaultResponseErrorHandler.java:55) 
    at org.springframework.web.client.DefaultResponseErrorHandler.hasError(DefaultResponseErrorHandler.java:49) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:489) 
    ... 3 more 

Но когда я пытаюсь сделать почтовый запрос на тот же URL-адрес с Postman, я получаю правильные результаты. Я пробовал разные способы отправки запроса, но каждый раз такую ​​же ошибку. Любые идеи, что может быть проблемой?

+0

@Scary ..no, я просто изменил его так, чтобы не показать фактический URL. – anand

+0

[Ссылки] (http://stackoverflow.com/questions/11648706/spring-resttemplate-client-connection-refused-exception) – gks

+0

Какой тип контента вы указали в Postman? – Andremoniy

ответ

0

Без просмотра конкретного примера домена, который отказывается от вашего соединения - трудно точно сказать, что происходит не так.

Но, по моему опыту, у меня были очень похожие проблемы, и довольно часто серверы блокируют запросы, содержащие ключевое слово «java» внутри заголовка User-Agent, которое по умолчанию происходит от вашего кода (не точно «java», но строка, которая содержит его). Это делается специально для блокировки различных ботов.

Итак, я предлагаю вам добавить заголовок User-Agent и установить его примерно как Mozilla/5.0 или просто Postman emulator и посмотреть, как он будет работать.

+0

попытался настроить пользовательский агент как для Mozilla, так и для Postman emulater, но с тем же сообщением об ошибке. Есть ли способ отладить эту проблему? – anand

+0

Есть ли серверные сообщения? –

+0

У меня нет доступа к разъему, поэтому не могу видеть журналы. – anand

0

Просто снимая выстрел, основываясь на моем опыте, возможно, вы находитесь за прокси-сервером (особенно если вы пытаетесь это сделать в своем офисе). Почтальон будет работать, поскольку прокси-сервер уже настроен в браузере. Попробуйте установить прокси-данные в программе, как показано ниже, // HTTP/HTTPS Proxy

System.setProperty("http.proxyHost", proxyhost); 
    System.setProperty("http.proxyPort", proxyport; 
    System.setProperty("https.proxyHost", proxyhost); 
    System.setProperty("https.proxyPort", proxyport); 
+0

Где я могу установить прокси? В коде или в затмении? – anand

+0

Вы можете поместить 4 строки, упомянутые в ответе, в начале вашего основного метода. – Santo

 Смежные вопросы

  • Нет связанных вопросов^_^