使用 cpp-netlib 发送 HTTP POST 请求
Sending HTTP POST requests using cpp-netlib
已更新
我正在使用 cpp-netlib (v0.11.0) 发送 HTTP 请求。
以下代码发送带有给定正文的 HTTP POST 请求。
client httpClient;
try
{
uri::uri url;
url << uri::scheme("http")
<< uri::host(m_hostname)
<< uri::port(m_port)
<< uri::path(m_path);
// create a request instance and configure the headers
client::request request(url);
request << header("Connection", "close");
request << header("Content-Type", "application/x-www-form-urlencoded");
// send the request
client::response response = httpClient.post(request, "foo=bar");
}
catch (std::exception& ex)
{
...
}
但是,以下代码会导致错误请求。
client httpClient;
try
{
uri::uri url;
url << uri::scheme("http")
<< uri::host(m_hostname)
<< uri::port(m_port)
<< uri::path(m_path)
<< uri::query("foo", "bar");
// create a request instance and configure the headers
client::request request(url);
request << header("Connection", "close");
request << header("Content-Type", "application/x-www-form-urlencoded");
request << body("foo=bar");
// send the request
client::response response = httpClient.post(request);
}
catch (std::exception& ex)
{
...
}
有人可以解释一下我在第二个示例中做错了什么,哪个是首选选项。
然后你应该添加如下内容:
// ...
request << header("Content-Type", "application/x-www-form-urlencoded");
request << body("foo=bar");
否则你不要在任何地方指定正文。
编辑:也尝试添加如下内容:
std::string body_str = "foo=bar";
char body_str_len[8];
sprintf(body_str_len, "%u", body_str.length());
request << header("Content-Length", body_str_len);
之前
request << body(body_str);
已更新
我正在使用 cpp-netlib (v0.11.0) 发送 HTTP 请求。
以下代码发送带有给定正文的 HTTP POST 请求。
client httpClient;
try
{
uri::uri url;
url << uri::scheme("http")
<< uri::host(m_hostname)
<< uri::port(m_port)
<< uri::path(m_path);
// create a request instance and configure the headers
client::request request(url);
request << header("Connection", "close");
request << header("Content-Type", "application/x-www-form-urlencoded");
// send the request
client::response response = httpClient.post(request, "foo=bar");
}
catch (std::exception& ex)
{
...
}
但是,以下代码会导致错误请求。
client httpClient;
try
{
uri::uri url;
url << uri::scheme("http")
<< uri::host(m_hostname)
<< uri::port(m_port)
<< uri::path(m_path)
<< uri::query("foo", "bar");
// create a request instance and configure the headers
client::request request(url);
request << header("Connection", "close");
request << header("Content-Type", "application/x-www-form-urlencoded");
request << body("foo=bar");
// send the request
client::response response = httpClient.post(request);
}
catch (std::exception& ex)
{
...
}
有人可以解释一下我在第二个示例中做错了什么,哪个是首选选项。
然后你应该添加如下内容:
// ...
request << header("Content-Type", "application/x-www-form-urlencoded");
request << body("foo=bar");
否则你不要在任何地方指定正文。
编辑:也尝试添加如下内容:
std::string body_str = "foo=bar";
char body_str_len[8];
sprintf(body_str_len, "%u", body_str.length());
request << header("Content-Length", body_str_len);
之前
request << body(body_str);