[英]Java HttpClient - Post with file through Proxy
我尝试使用代理从Web应用程序调用外部网站。 此外,需要在此外部网站上执行POST请求。
我正在使用:tomcat7,org.apache.httpcomponents 4.3.4,春季。
在没有代理的情况下工作,并且我的响应状态为“ 200”;
// uri = "https://punkte.eiv-fobi.de/upload/upload.do"
private HttpStatus sendPost(URI uri, File file)
throws ClientProtocolException, IOException {
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(uri);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody fileBody = new FileBody(file, ContentType.MULTIPART_FORM_DATA);
builder.addPart(PART_NAME, fileBody);
httpPost.setEntity(builder.build());
HttpResponse response = httpClient.execute(httpPost);
return HttpStatus.valueOf(response.getStatusLine().getStatusCode());
}
现在我尝试添加代理:
// uri = "https://punkte.eiv-fobi.de/upload/upload.do"
public HttpStatus sendPostWithProxy(URI uri, File file) throws Exception {
try {
// JVM Parameter: -Dhttps.proxyHost and -Dhttps.proxyPort
String proxyHost = System.getProperty("https.proxyHost");
String proxyPort = System.getProperty("https.proxyPort");
HttpClient httpClient = HttpClientBuilder.create().build();
// CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(uri);
HttpHost proxy = new HttpHost(proxyHost,
Integer.valueOf(proxyPort), "https");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody fileBody = new FileBody(file,
ContentType.MULTIPART_FORM_DATA);
builder.addPart(PART_NAME, fileBody);
httpPost.setEntity(builder.build());
RequestConfig config = RequestConfig.custom().setProxy(proxy)
.build();
httpPost.setConfig(config);
HttpResponse response = httpClient.execute(httpPost);
return HttpStatus.valueOf(response.getStatusLine().getStatusCode());
} catch (Exception e) {
LOGGER.error(
"exception occurred.",
e);
}
return null;
}
得到以下异常:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
我错了什么? 备择方案?
我可以想到一些可能导致此问题的问题:
您确定您的https代理不需要身份验证吗? 在这种情况下,您可能需要在上下文中设置凭据并使用上下文和客户端执行请求。请检查以下示例: http : //www.the-swamp.info/blog/java-request-through-proxy /
由于您正在使用https代理并请求https url(SSL / TLS端点安全性),因此证书验证可能会遇到问题。 检查有关https代理的良好解释: 使用Http代理与https代理的优缺点?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.