繁体   English   中英

POCO Net C ++库中的代理验证

[英]Proxy Authentication in POCO Net C++ library

我一直在玩Poco Net库一段时间,这是非常好的。 非常方便易懂。

我能够设置代理地址,并且正确地说需要407代理授权。 我想是的

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.setCredentials(scheme, authInfo);

我尝试了方案中的“basic”,“plaintext”和authInfo中的“user:password”等值。 它似乎不起作用。 谷歌没有帮助。

有没有人以前使用Poco Net做过这件事? 或者用法是显而易见的,因为我一般不了解代理身份验证,所以我无法使用它? 请指教。

编辑:经过一些更多的游戏,我认为当远程服务器期望身份验证信息登录时使用setCredentials函数。 我无法找到使用Poco Net库进行代理身份验证的方法。 我能够设置代理服务器和端口。 如果只有没有身份验证的代理服务器,我就会这样做:

HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("host", port);
session.sendRequest(req);

需要帮忙。

编辑:基于@StackedCrooked建议的解决方案,我尝试在发出请求之前将代理身份验证详细信息设置到请求标头,并且在互联网上找到的另一种方法中,我只在发出初始请求和407错误后才设置代理身份验证详细信息来了,然后再次提出请求。 两种方法都保持相同的407错误。 我当前的代码如下所示:

HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("10.7.128.1", 8080);
req.set("Proxy-Authentication", "Basic bGVlbGE6bGVlbGExMjM=");
session.sendRequest(req);

您可能需要将代理授权字段添加到HTTP标头。 Poco的HTTPRequest类没有专门的方法。 但是,由于它公开继承了NameValueCollection类,您可以像这样设置它:

req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");

其中QWxhZGRpbjpvcGVuIHNlc2FtZQ==是“Aladdin:open sesame”的base64编码版本。

一旦你对HTTP协议有所了解,很多这些问题就变得容易了。 我现在大多是在向自己讲道:)

我自己没有用过这个,但你看过HTTPBasicCredentials类了吗? 它通过其authenticate方法包装对req.setCredentials的调用。 你最终会得到以下内容:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM