使用c++代码发送POST多部分/表单数据请求
Sending POST multipart/form-data request using c++ code
我正在尝试编写一个客户端,它将连接到服务器并发出HTTPPOST多部分/表单数据请求。请检查以下代码。使用此代码,我不会得到任何错误响应。我能得到一些回应,但并不完全是我所期望的。
有了这段代码,我可以访问URL,但我认为服务器没有读取参数(有效负载)。
我不确定我是否通过了适当的有效载荷。
请帮我写一个合适的有效载荷。谢谢
void BuildHTTPRequest::BuildHeader1(stringstream &hdr,string payload)
{
hdr << "POST /home/one/user/send_event HTTP/1.1rn";
hdr << "Host:host.domain.comrn";
hdr << "Port:80rn";
hdr << "Content-Type:multipart/form-data; boundary=463762444806rn";
hdr << "Content-Length:" << payload.size() << "rn";
hdr << "rn";
hdr << payload;
}
void BuildHTTPRequest::BuildPayload1(string *payload)
{
(*payload).append("Content-Disposition: form-data; name="interface_version"rnrn");
(*payload).append("01.0.01rn");
(*payload).append("-----------------------------463762444806rn");
(*payload).append("Content-Disposition: form-data; name="terminal_id"rnrn");
(*payload).append("1rn");
(*payload).append("-----------------------------463762444806rn");
(*payload).append("Content-Disposition: form-data; name="device"rnrn");
(*payload).append("displayrn");
(*payload).append("-----------------------------463762444806rn");
(*payload).append("Content-Disposition: form-data; name="start_session"rnrn");
(*payload).append("truern");
(*payload).append("-----------------------------463762444806rn");
(*payload).append("Content-Disposition: form-data; name="first_contact"rnrn");
(*payload).append("truern");
(*payload).append("-----------------------------463762444806--rnrn");
}
您还应该在第一个有效负载数据之前有一个边界分隔符,并且由于您没有在多部分数据之前放置任何前导码,因此您的请求标头和有效负载之间需要2个CRLF。
封装边界以CRLF开始的要求意味着多部分实体的主体本身必须以CRLF在第一条封装线之前——也就是说,如果"前导码"区域,实体标头后面必须跟两个CRLF。这确实是这些实体的组成方式。
此外,为什么在分隔符的边界值之前使用两个以上的连字符?
Specs表示:
多部分实体的内容类型字段需要一个参数,"边界",用于指定封装边界。这个封装边界被定义为一条完全由两条线组成的线后跟边界的连字符("-",十进制代码45)"内容类型"标头字段中的参数值。
因此,一个典型的多部分Content-Type头字段可能看起来像这个:
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
这表明实体由几个部分组成,每个部分本身都有一个结构语法上与RFC 822消息相同,只是报头区域可能完全为空,并且每个部分都在前面按线路
--gc0p4Jq0M2Yt08jU534c0p
试试这个:
void BuildHTTPRequest::BuildPayload1(string *payload)
{
(*payload).append("rn--463762444806rn");
(*payload).append("Content-Disposition: form-data; name="interface_version"rnrn");
(*payload).append("01.0.01rn");
(*payload).append("--463762444806rn");
(*payload).append("Content-Disposition: form-data; name="terminal_id"rnrn");
(*payload).append("1rn");
(*payload).append("--463762444806rn");
(*payload).append("Content-Disposition: form-data; name="device"rnrn");
(*payload).append("displayrn");
(*payload).append("--463762444806rn");
(*payload).append("Content-Disposition: form-data; name="start_session"rnrn");
(*payload).append("truern");
(*payload).append("--463762444806rn");
(*payload).append("Content-Disposition: form-data; name="first_contact"rnrn");
(*payload).append("truern");
(*payload).append("--463762444806--rnrn");
}
相关文章:
- GTK 最大化表单 C++
- win 表单应用程序字符串^ 到 int
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 可以在JSON文件的帮助下在Qt中创建UI表单
- 表单未显示在凭据提供程序中
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何从 winapi 中的编辑表单获取文本?
- 家庭作业帮助 - 检查表单按钮上的数据
- 将数据表单文本文件读取到数组中时出现问题
- 使用 Cgicc 获取表单数据
- 无法从具有多部分/表单数据的表单中获取数据
- 如何在qt中的表单之间传递数据
- 如何在C++中从命令行获取CGI表单数据
- C++CGI脚本,读取表单数据
- 将数据发送到另一个表单上的小部件
- CSV数据到表单控件中
- 不按我的要求显示数据输入表单
- c++ rest sdk POST表单数据json
- 如何/应该在Qt中创建ui表单和数据成员之间的自动链接
- Web数据提取和表单填写