Как добавить в post запрос form-data?

302
09 февраля 2018, 20:24

Как исправить код, чтобы корректно отправляло "form-data":

private static Request request = null;
private static OkHttpClient client= new OkHttpClient.Builder()
        .cookieJar(new CookieJar() {
            private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
            @Override
            public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
                cookieStore.put(url, cookies);
            }
            @Override
            public List<Cookie> loadForRequest(HttpUrl url) {
                List<Cookie> cookies = cookieStore.get(url);
                return cookies != null ? cookies : new ArrayList<Cookie>();
            }
        }).build();
        RequestBody formBody = new FormBody.Builder()
                .add("user_name", "значение-1")
                .add("user_pass", "значение-2")
                .build();
        request = new Request.Builder()
                .url("https://сайт.ru/")
                .post(formBody)
                .build();
        System.out.println(client
                .newCall(request)
                .execute().body().string());

Делаю точно такой же запрос через postman, но ответы сайта различаются. Может не правильно пишу в андройд или что-то пропускаю?? postman:

А запрос в коде postmana на java выглядит так:

OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("multipart/form-data; boundary=----
WebKitFormBoundary7MA4YWxkTrZu0gW");
RequestBody body = RequestBody.create(mediaType, "------        
WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; 
name=\"user_name\"\r\n\r\nЗначение-1\r\n------
WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; 
name=\"user_pass\"\r\n\r\nЗначение2\r\n------
WebKitFormBoundary7MA4YWxkTrZu0gW--");
Request request = new Request.Builder().url("https://сайт.ru/").post(body).addHeader("content-type", "multipart/form-data; boundary=----        
WebKitFormBoundary7MA4YWxkTrZu0gW").addHeader("Content-Type", "application/x-www-form-urlencoded").addHeader("Cache-Control", "no-cache").addHeader("Postman-Token", "2c124ba6-7bef-772d-404d-8136f5166b45").build();
Response response = client.newCall(request).execute();
Answer 1

При отправке из postman MediaType = multipart/form-data, чтобы создать аналогичный запрос вручную, используйте MultipartBody.Builder:

RequestBody partFormBody = new FormBody.Builder()
    .add("user_name", "значение-1")
    .add("user_pass", "значение-2")
    .build();
RequestBody formBody = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addPart(partFormBody)
    .build();
READ ALSO
Менять строки таблицы jquery

Менять строки таблицы jquery

Есть скрипт динамической таблицы

260
Как добавить html2canvas к dom-to-image?

Как добавить html2canvas к dom-to-image?

Когда делаю скрин dom-to-image все нормально, но не во всех браузерах работаетПытаюсь добавить html2canvas, чтобы скрины делать отдельно для safari, но они...

369
внедрение php кода во внешние js файлы

внедрение php кода во внешние js файлы

Подскажите, возможно ли реализовать следующую ситуацию:

240
Как сделать защищенный сайт с функциями отправки файлов и подтверждения её принятие [требует правки]

Как сделать защищенный сайт с функциями отправки файлов и подтверждения её принятие [требует правки]

Здравствуйте! Вообщем я буду делать сайт с уровнями доступа (царь, барин, крестьяне) и смысл в том что царь поручает дело, одному из баринов,...

209