使用restbed C ++发送POST multipart / form-data请求

时间:2018-02-04 15:19:13

标签: c++ rest multipartform-data restbed

我正在使用 restbed lib在C ++ rest客户端上工作,它将使用POST请求发送base64编码的图像。 我到目前为止写的代码是:

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 flask)我添加了: encoded_img = request.form.get('image')并打印字符串。打印结果为:“无”

1 个答案:

答案 0 :(得分:1)

您的正文内容在每行末尾都缺少明确的换行符。 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);