37

私の Android アプリケーションでは、okHttpライブラリを使用しています。okhttp ライブラリを使用してサーバー (api) にパラメーターを送信するにはどうすればよいですか? 現在、次のコードを使用してサーバーにアクセスしていますが、okhttp ライブラリを使用する必要があります。

これは私のコードです:

httpPost = new HttpPost("http://xxx.xxx.xxx.xx/user/login.json");
nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("email".trim(), emailID));
nameValuePairs.add(new BasicNameValuePair("password".trim(), passWord));
httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
String response = new DefaultHttpClient().execute(httpPost, new BasicResponseHandler());
4

9 に答える 9

52

OkHttp 3.x では、FormEncodingBuilder が削除されました。代わりに FormBody.Builder を使用してください

        RequestBody formBody = new FormBody.Builder()
                .add("email", "Jurassic@Park.com")
                .add("tel", "90301171XX")
                .build();

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .post(formBody)
                .build();

        Response response = client.newCall(request).execute();
        return response.body().string();
于 2016-01-12T07:22:02.043 に答える
46
    private final OkHttpClient client = new OkHttpClient();

      public void run() throws Exception {
        RequestBody formBody = new FormEncodingBuilder()
            .add("email", "Jurassic@Park.com")
            .add("tel", "90301171XX")
            .build();
        Request request = new Request.Builder()
            .url("https://en.wikipedia.org/w/index.php")
            .post(formBody)
            .build();

        Response response = client.newCall(request).execute();
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

        System.out.println(response.body().string());
      }
于 2015-04-22T11:09:23.717 に答える
7

RequestBodyオブジェクトを作成する前に、POST の本文をフォーマットするだけです。

これは手動で行うこともできますが、Square (OkHttp のメーカー) のMimeCraftライブラリを使用することをお勧めします。

この場合、FormEncoding.Builderクラスが必要です。キーと値のペアごとcontentTypeに toを設定して"application/x-www-form-urlencoded"使用します。add(name, value)

于 2014-06-15T21:20:27.323 に答える
2

別の方法 (MimeCraft を使用しない場合) は、次のようにします。

    parameters = "param1=text&param2=" + param2  // for example !
    request = new Request.Builder()
            .url(url + path)
            .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, parameters))
            .build();

そして宣言します:

    public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8");
于 2015-05-25T10:59:19.413 に答える
0

(Kotlin バージョン) 以下が必要です。

...
val formBody = FormBody.Builder()
    .add("your_key", "your_value")
    .build()
val newRequest: Request.Builder = Request.Builder()
    .url("api_url")
    .addHeader("Content-Type", "application/x-www-form-urlencoded")
    .post(formBody)
...

次に、npm body-parser がインストールされた nodejs Express サーバーがある場合は、次のことを確認してください。

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
...
于 2020-12-28T22:25:10.717 に答える