2017-03-09 6 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(); 
関連する問題