1

프록시를 사용하여 웹 응용 프로그램에서 외부 웹 사이트를 호출 해 봅니다. 또한이 외부 웹 사이트에서 POST 요청을 실행해야합니다.Java HttpClient - 프록시를 통해 파일로 게시

저는 다음을 사용하고 있습니다 : tomcat7, org.apache.httpcomponents 4.3.4, spring.

프록시없이 작동하면 응답 상태가 '200'이됩니다.

// 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? 

// 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()); 
    } 

지금 나는이 추가 프록시를 시도? 대안?

답변

1
나는이 문제를 일으킬 수있는 몇 가지 문제를 생각할 수

:

  • 당신은 확실히 당신의 HTTPS 프록시 인증을 필요로하지 않습니다 있는가가? 이 경우 컨텍스트에서 자격 증명을 설정하고 컨텍스트와 클라이언트를 사용하여 요청을 실행해야합니다. http://www.the-swamp.info/blog/java-request-through-proxy/

  • https 프록시를 사용 중이므로 https url (SSL/TLS 끝점 보안) 인증서 유효성 검사에 문제가있을 수 있습니다. https 프록시에 대한 좋은 설명을 확인하십시오. Pros and cons of using a Http proxy v/s https proxy?

관련 문제