rest — отправляет POST multipart / form-data запрос, используя перезапуск Stack Overflow

Я работаю на клиенте отдыха C ++, используя restbed lib, которая отправит изображение в кодировке base64 с помощью запроса POST.
Код, который я написал до сих пор:

auto request = make_shared< Request >(Uri("http://127.0.0.1:8080/ProcessImage"));
request->set_header("Accept", "*/*");
request->set_header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request->set_header("Cache-Control", "no-cache");
request->set_method("POST");
string test = "------WebKitFormBoundary7MA4YWxkTrZu0gW""Content-Disposition:form-data;name=\"image\"""""testMessage""------WebKitFormBoundary7MA4YWxkTrZu0gW--";
request->set_body(imgContent);
auto response = Http::sync(request)

Я не уверен, как мне установить тело запроса. Я попытался с простым image = «blabla», а также с этой длинной версией сообщения, которое я получил от почтальона.
Но в каждом случае я получал ответ «Ошибка 400 неверный запрос».

Обновить:
Протестировано также с этой версией кода, но безуспешно:

auto request = make_shared< Request >(Uri("http://127.0.0.1:8080/ProcessImage"));
request->set_header("Accept", "*/*");
request->set_header("Host","127.0.0.1:8080");
request->set_method("POST");
request->set_header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request->set_header("Cache-Control", "no-cache");
string imgContent = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\n""Content-Disposition: form-data; name=\"image\"\r\n""\r\n""test\r\n""------WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n";
request->set_body(imgContent
auto response = Http::sync(request);

Ответ я получаю с сервера:

    *** Response ***
Status Code:    400
Status Message: BAD REQUEST
HTTP Version:   1.0
HTTP Protocol:  HTTP
Header 'Content-Length' > '192'
Header 'Content-Type' > 'text/html'
Header 'Date' > 'Sun, 04 Feb 2018 21:09:45 GMT'
Header 'Server' > 'Werkzeug/0.14.1 Python/3.5.4'
Body:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>
²²²²∩x...

Также на стороне сервера (которая использует флягу Python) я добавил:
encoded_img = request.form.get (‘image’) и напечатали строку. Результат печати был: «Нет»

0

Решение

В содержании вашего тела отсутствуют явные символы разрыва строки в конце каждой строки. C ++ не вставляет их автоматически для вас.

Кроме того, если вы собираетесь отправлять данные base64, вы должны включить Content-Transfer-Encoding заголовок тоже.

Попробуй это:

string imgContent = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\n""Content-Disposition: form-data; name=\"image\"\r\n""Content-Transfer-Encoding: base64\r\n""\r\n""<base64 image data here>\r\n""------WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n";
request->set_body(imgContent);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]