2017-03-09 55 views
0

這是我目前爲止的代碼。到副服務器的Java代理POST請求

工作是從原始請求讀取所有表單名稱/值。 不起作用的是新服務器沒有收到任何新分配的表單名稱/值。基本上他們似乎不會傳輸到輔助服務器。

可能有更簡單的方法來做到這一點?我需要的只是從新服務器觸發特定的表單域,並重定向到一個處理請求的子服務器,並通過主服務器將結果傳回給客戶端(代理服務器)。

String value = String.format("https://%s.myotherserver.com%s", "sub1", request.getRequestURI()); 

HttpPost uploadFile = new HttpPost(value); 
uploadFile.addHeader("Content-Type", request.getContentType()); 
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 

ContentBody cbFile = new InputStreamBody(request.getPart("audio").getInputStream(), ContentType.create("audio/webm"),"audio.ogg"); 
builder.addPart("audio", cbFile); 

builder.addPart("text", new StringBody(request.getParameter("text"),ContentType.DEFAULT_TEXT)); 
builder.addPart("email", new StringBody(request.getParameter("email"),ContentType.DEFAULT_TEXT)); 

// now add the other original form name/values to new request 
do 
{ 
    String parameterName = reqParameterNames.nextElement().toString(); 
    Object parameterValue = request.getParameter(parameterName); 
    if (!privateParameters.contains("p_"+parameterName)) { 
     builder.addPart(new FormBodyPart(parameterName, new StringBody((String) parameterValue,ContentType.DEFAULT_TEXT))); 
    } 
} while (reqParameterNames.hasMoreElements()); 

HttpEntity multipart = builder.build(); 
uploadFile.setEntity(multipart); 

CloseableHttpClient httpClient2 = HttpClients.createDefault(); 
CloseableHttpResponse statusCode = httpClient2.execute(uploadFile); 
HttpEntity responseEntity = statusCode.getEntity(); 
StringBuffer responseBuffer = new StringBuffer(); 
OutputStream output = response.getOutputStream(); 
ByteStreams.copy(responseEntity.getContent(), output); 
output.flush(); 

回答

0

我終於設法使它與下面的代碼一起工作。我希望這可以幫助別人;

MultipartEntityBuilder mb = null; 
org.apache.http.HttpEntity entity =null; 
String value = String.format("https://%s.myotherserver.com%s", "sub1", request.getRequestURI()); 

mb = MultipartEntityBuilder.create(); 
mb.addTextBody("noproxy", "true"); 
mb.addTextBody("text", request.getParameter("text")); 
mb.addTextBody("email", request.getParameter("email")); 
mb.addBinaryBody("audio", new File(inputAudioFilename)); 

entity = mb.build(); 
URLConnection conn = new URL(urlStr[i]).openConnection(); 
conn.setDoOutput(true); 
conn.addRequestProperty(entity.getContentType().getName(), entity.getContentType().getValue()); 
conn.addRequestProperty("Content-Length", String.valueOf(entity.getContentLength())); 
OutputStream fout = conn.getOutputStream(); 
entity.writeTo(fout);//write multi part data... 
fout.flush(); 
fout.close(); 
OutputStream output = response.getOutputStream(); 
output.flush(); 
        ByteStreams.copy(conn.getInputStream(),response.getOutputStream()); 

conn.getInputStream().close();