如何使用POCO使用HTTP基本身份验证做HTTP帖子
How do I make an HTTP Post with HTTP Basic Authentication, using POCO?
我正在尝试使用POCO使用HTTP Basic Authentication(ClearText用户名和密码)进行HTTP帖子。我找到了一个get的例子,并试图修改它,但是作为新秀,我认为我已经将其弄脏了。有人知道该怎么做吗?
是的,我已经看过另一个问题:POCO C -Net SSL-如何发布HTTPS请求,但是我无法理解它如何实现用户名和密码部分。我也不了解" X-WWW-Form-urlenCoded"的使用。这是帖子需要的吗?我没有表格。只想用用户名和密码参数发布到服务器。
最后。这是您这样做的方式:
HTTPClientSession session("yourdomain.com");
session.setKeepAlive(true);
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, "/myapi.php/api/validate", HTTPMessage::HTTP_1_1);
req.setContentType("application/x-www-form-urlencoded");
req.setKeepAlive(true); // notice setKeepAlive is also called on session (above)
std::string reqBody("username=user1@yourdomain.com&password=mypword");
req.setContentLength( reqBody.length() );
std::ostream& myOStream = session.sendRequest(req); // sends request, returns open stream
myOStream << reqBody; // sends the body
req.write(std::cout);
Poco::Net::HTTPResponse res;
std::istream& iStr = session.receiveResponse(res); // get the response from server
std::cerr << iStr.rdbuf(); // dump server response so you can view it
执行HTTP帖子时,通常以两种形式发送到服务器的数据:
-
名称,名称和价值由" ="分开的值对,而不同的对被"&amp;"分开。例如:
var1=value1&var2=value2
。同样,这些名称值对也会发送,以便某些特殊字符和非alphanumericer字符被%HH
,一个百分比和两个代表该字符ASCII代码的十六进制数字替换。例如,如果第一个参数的值包含一个"#",则将其发送为var1=value1%23&var2=value2
。在以这种格式发送数据时,要求客户端插入具有值application/x-www-form-urlencoded
的内容类型标头,以便服务器可以正确解码数据。 -
作为多部分哑剧主体,每个零件的大小都可以大,还包括"非排放"数据(包括二进制数据)。不同的MIME零件由未出现在任何MIME"有效载荷"中的字符串定界符(边界)分开。在以这种格式发送数据时,客户需要插入具有值
multipart/form-data
的内容类型标头。
在您引用过的先前的堆叠式问题的情况下,请求主体是以上述方式发送的。希望澄清。
问候,siddharth
来自POCO库凭据测试,这是代码:
HTTPRequest request;
assert (!request.hasCredentials());
HTTPBasicCredentials cred("user", "secret");
cred.authenticate(request);
assert (request.hasCredentials());
std::string scheme;
std::string info;
request.getCredentials(scheme, info);
assert (scheme == "Basic");
assert (info == "dXNlcjpzZWNyZXQ=");
HTTPBasicCredentials cred2(request);
assert (cred2.getUsername() == "user");
assert (cred2.getPassword() == "secret");
发送请求时,您仅使用此代码的第一部分(停在cred.authenticate(request)
)。
- LibGit2 SSH身份验证失败
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- 如何通过NetHTTPClient在HTTPS中进行身份验证
- 处理身份验证弹出窗口在wxWebView
- 如何测试我的谷歌身份验证器实现?
- 通过 Boost 和 C++ 进行 SMTP 身份验证
- libtorrent是否支持带摘要身份验证的http web种子
- 将Windows身份验证与cpprestsdk一起使用
- OCCI:使用SSL钱包身份验证连接到OracleDB
- 为什么我不能使用外围设备进行身份验证
- 无法使用C++代码向MongoDB进行身份验证
- 模拟的 HTTP 身份验证仅在本地主机上工作
- 使用OpenSSL的SHA 512 HMAC消息身份验证的问题
- Windows 套接字和身份验证构建在包含 Poco-Library 时失败
- 解析 HTTP 的摘要式身份验证的正确正则表达式模式是什么?
- Casablanca中的HTTP身份验证
- 如何使用POCO使用HTTP基本身份验证做HTTP帖子
- 可以创建一个单例 c++ 来进行身份验证并使用对 Facebook API 的 HTTP 请求在墙上发布
- gSOAP HTTP身份验证
- 如何发送具有基本身份验证的HTTP请求