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

时间:2009-08-25 10:52:20

标签: c++ proxy-authentication

我一直在玩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);

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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