Sah*_*has 6 c++ proxy-authentication
我一直在玩Poco Net库一段时间,这是非常好的.非常方便易懂.
我能够设置代理地址,并且正确地说需要407代理授权.我想是的
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.setCredentials(scheme, authInfo);
Run Code Online (Sandbox Code Playgroud)
我尝试了方案中的"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);
Run Code Online (Sandbox Code Playgroud)
需要帮忙.
编辑:基于@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);
Run Code Online (Sandbox Code Playgroud)
您可能需要将代理授权字段添加到 HTTP 标头。Poco 的 HTTPRequest 类没有专门的方法来实现这一点。但是,由于它公开继承了 NameValueCollection 类,因此您可以像这样设置它:
req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");
Run Code Online (Sandbox Code Playgroud)
QWxhZGRpbjpvcGVuIHNlc2FtZQ==“阿拉丁:芝麻开门”的base64编码版本在哪里?
一旦您了解了一些 HTTP 协议,许多这些问题就会变得更容易。我现在主要是对自己说教:)