0

簡単な投稿リクエストを送信する簡単なスニペットを書いています。

現在、私は次のようにリクエストを作成しています:

    // Construct data
    String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8");
    data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8");

    // Send data
    URL url = new URL("http://server:8080/servlet/upload");
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data);
    wr.flush();

    // do stuff with response....

これは今のところ機能します。しかし、ファイルのアップロードをマルチパート POST リクエストとして追加する必要があります。これどうやってするの?HttpClientできればコモンからの使用は避けたいです。

4

4 に答える 4

3

現在、HTTP をまったく使用していません。POST を実行する場合、最初に行う必要があるのは、正しいヘッダーなどを送信していることを確認することです。これにより、実際に HTTP 接続を行っていることになります。ファイルの内容を POST に適切にエンコードするには、 RFC 1867 ( https://www.rfc-editor.org/rfc/rfc1867 )に従う必要があります。これは簡単なことではありません。そのため、これを行うライブラリが存在します。だから私は尋ねなければなりません:なぜHttpClientを避けるのですか?私はいつもこの目的のためにそれを使用してきました。信頼性が高く、完全で高性能です。(メモリ/ディスク) スペースが不足していますか?

于 2009-12-24T10:20:12.570 に答える
1

要するに、 RFC 1687およびRFC 2388で指定されている形式のデータで出力ストリームを構築する必要があります。大変な作業です。キックオフ コードの例を投稿するつもりはありません。申し訳ありません :) ただし、RFC には明確な情報と、データがどのように見えるかのいくつかの例が含まれています。それは絶対に実行可能です。

于 2009-12-24T10:18:41.090 に答える
0

これは私の場合はうまくいったので、これを試してください

File f = new File(filePath);
PostMethod filePost = new PostMethod(url);
Part[] parts = { new FilePart("file", f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
status = client.executeMethod(filePost);
logger.info("upload status: " + status);
于 2012-04-02T11:13:10.000 に答える
0

このコード スニペットは役に立ちました:マルチパート リクエストをプログラムで送信してファイルをアップロードする

外部依存関係がなく、コメントを含めてわずか 150 行のコードであり、Apache HttpClient ライブラリよりも扱いが簡単です。

于 2016-12-10T16:32:09.870 に答える