0

現在、これを使用してxmlファイルをURLに投稿しています:

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つの違いを誰かが説明できますか?

4

1 に答える 1

1

HttpClientのApache ドキュメントには、リクエストでデータをストリーミングする例があります。

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));

2 つの違いについては、どちらも HTTP 要求の本文にデータを格納します。として、以下は 2 つの URL エンコード パラメータ (homeおよび)を持つ標準の HTTP POST 要求favorite flavorです。入力ストリームを直接使用すると、パラメーターを解析する必要がないため、わずかに効率的になります。

POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

home=Cosby&favorite+flavor=flies
于 2012-04-22T22:13:42.157 に答える