2017-03-09 26 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();