以下是代码
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);
}
}当我运行上面的代码时,它会给我异常
线程"main“中出现异常
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但是当我尝试用Postman向相同的URL发出post请求时,我得到了正确的结果。我尝试了不同的方法来发布请求,但每次都是相同的错误。有什么想法可能会出问题吗?
发布于 2018-07-13 14:50:21
我面对同样的problem.It是因为我正在使用办公室互联网,可能是使用了一些proxies.So,我尝试通过热点使用我的移动互联网,我能够获取结果。
这可能是由于某些代理阻止它获取结果而导致的。
谢谢
发布于 2017-02-09 09:33:54
如果不查看拒绝连接的域的具体示例,就很难准确地说出出了什么问题。
但是,根据我的经验,我有非常类似的问题,当服务器阻塞在User-Agent头中包含"java“关键字的请求时,默认情况下,它来自您的代码(不完全是"java",而是包含它的字符串)。这是专门为了阻止各种机器人而做的。
因此,我建议您添加User-Agent头并将其设置为类似Mozilla/5.0或简单的Postman emulator,然后看看它是如何工作的。
发布于 2017-02-09 09:47:32
根据我的经验,你可能在代理服务器后面(特别是当你在办公室尝试的时候)。Postman将工作,因为代理已在浏览器中配置。尝试在程序中设置代理信息,如下所示: // HTTP/HTTPS proxy
System.setProperty("http.proxyHost", proxyhost);
System.setProperty("http.proxyPort", proxyport;
System.setProperty("https.proxyHost", proxyhost);
System.setProperty("https.proxyPort", proxyport);https://stackoverflow.com/questions/42126673
复制相似问题