2012-04-22 6 views
0

に私は現在、これを使用してURLにxmlファイルを掲載しています:は、XMLドキュメントを投稿ではなく、リクエストパラメータを経由してなく、身体

HttpClient client = new HttpClient(); 
HttpPost post = new HttpPost("http://www.example.com/post/here"); 

File f = new File("/path/to/file/file.txt"); 
String str = Files.toString(f, Charset,defaultCharset()); 

List<NameValuePair> nvp = new ArrayList<NameValuePair>(1); 
nvp.add(new BasicNameValuePair("payload", xmlFile)); 

post.setEntity(new UrlEncodedFormEntity(nvp)); 

HttpResponse response = client.execute(post); 

しかし、これは、このような「ペイロード」のリクエストパラメータを追加しています私は私のdoPostメソッドサーブレットで値を受信したいとき、私はやるだろうということ:私は、このパラメータ「ペイロード」リクエストヘッダにあると推測している

request.getParameter("payload"); 

私は何をしたいことは、私のdoPostメソッドで、私は、ストリームからデータを取得する必要がありますので、すなわち、要求の本体に送信され、このファイルを持っている:

... = request.getInputStream(); 

どのように私は私を変更することができますこれを行うコード? (httpclientを使用)

また、誰かが2の違いを説明することができますか?

答えて

1

Apache documentation on HttpClientが要求におけるストリーミングデータの一例を有する2つの違いとしては

public class FileRequestEntity implements RequestEntity { 

    private File file = null; 

    public FileRequestEntity(File file) { 
     super(); 
     this.file = file; 
    } 

    public boolean isRepeatable() { 
     return true; 
    } 

    public String getContentType() { 
     return "text/plain; charset=UTF-8"; 
    } 

    public void writeRequest(OutputStream out) throws IOException { 
     InputStream in = new FileInputStream(this.file); 
     try { 
      int l; 
      byte[] buffer = new byte[1024]; 
      while ((l = in.read(buffer)) != -1) { 
       out.write(buffer, 0, l); 
      } 
     } finally { 
      in.close(); 
     } 
    } 

    public long getContentLength() { 
     return file.length(); 
    } 
} 

File myfile = new File("myfile.txt"); 
PostMethod httppost = new PostMethod("/stuff"); 
httppost.setRequestEntity(new FileRequestEntity(myfile)); 

、それらの両方は、HTTPリクエストのボディにデータを格納します。 exampleとして、2つのURLエンコードされたパラメータ(homeおよびfavorite flavor)を持つ標準的なHTTP POST要求が次にあります。入力ストリームを直接使用することは、パラメータを解析する必要がないため、やや効率的です。

POST /path/script.cgi HTTP/1.0 
From: [email protected] 
User-Agent: HTTPTool/1.0 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 32 

home=Cosby&favorite+flavor=flies 
関連する問題