Отправить --data-binary с аналогом curl в Java - PullRequest
0 голосов
/ 23 сентября 2019

Я хотел бы отправить POST-запрос, используя Java-эквивалент следующего примера CURL:

echo "param value" | curl --data-binary @-  -uuser:pass https://url

Я пробовал apache http setEntity (сущность FileEntity), 400 неверных запросов

Iпробовал apache http setEntity (сущность MultiPartEntity), 400 ошибочных запросов

// ----------------
// General part

String url = "https://url";
String content  = "param" + " " + "value";
File file = new File("test.txt");
try {
            FileUtils.writeStringToFile(file, content, StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }

String encoding = Base64.getEncoder().encodeToString(("user:pass").getBytes());

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
post.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding);

// -----------------
// 1. FileEntity try

FileEntity reqEntity = new FileEntity (file, ContentType.DEFAULT_BINARY);
post.setEntity(reqEntity);

HttpResponse response = httpclient.execute(post);


// ----------------
// 2. Multipart try

MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file, org.apache.http.entity.ContentType.DEFAULT_BINARY);
mpEntity.addPart("userfile", cbFile);
post.setEntity(mpEntity);

HttpResponse response = httpclient.execute(post);

Я ожидал получить 200, но получил 400 неправильных запросов.

Исходный CURL работает должным образом

1 Ответ

0 голосов
/ 23 сентября 2019

Проблема с параметром границы отсутствует в заголовке Content-Type

На самом деле Если вы используете один из типов содержимого multipart/, вам действительно необходимо указать параметр границы взаголовок Content-Type, но здесь, когда запрос curl не пытается генерировать какие-либо граничные значения, без граничных значений сервер (в случае HTTP request) не сможет проанализировать полезную нагрузку

...