Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ POCO网络C+中的代理身份验证+;图书馆_C++_Proxy Authentication - Fatal编程技术网

C++ POCO网络C+中的代理身份验证+;图书馆

C++ POCO网络C+中的代理身份验证+;图书馆,c++,proxy-authentication,C++,Proxy Authentication,我已经玩了一段时间的Poco网络库,它是相当不错的。非常方便和容易理解 我可以设置一个代理地址,它说需要407代理授权,这是正确的。我想 HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); req.setCredentials(scheme, authInfo); 我在scheme中尝试了“basic”、“明文”和authInfo中的“user:password”等值。它似乎不起作用。谷歌帮不上忙 以前是否有

我已经玩了一段时间的Poco网络库,它是相当不错的。非常方便和容易理解

我可以设置一个代理地址,它说需要407代理授权,这是正确的。我想

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.setCredentials(scheme, authInfo);
我在scheme中尝试了“basic”、“明文”和authInfo中的“user:password”等值。它似乎不起作用。谷歌帮不上忙

以前是否有人使用Poco Net进行过此操作?或者,这种用法是显而易见的,而我之所以不能使用它,是因为我对代理身份验证一般一无所知?请给我一些建议

编辑:在进行了更多的操作之后,我认为当远程服务器需要身份验证信息登录时,可以使用setCredentials函数。我一直无法找到使用Poco网络库进行代理身份验证的方法。不过我可以设置代理服务器和端口。如果只有一个没有身份验证的代理服务器,我会这样做:

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

编辑:根据@StackedCrooked建议的解决方案,我尝试在发出请求之前将代理身份验证详细信息设置到请求头,在internet上找到的另一种方法中,我仅在发出初始请求后设置代理身份验证详细信息,出现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);
req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");

我自己没用过这个,但是你看过课堂了吗?它通过其身份验证方法结束对req.setCredentials的调用。你最终会得到一些大致如下的东西:

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

您可能需要将代理授权字段添加到HTTP头中。Poco的HTTPRequest类没有用于此目的的专用方法。但是,由于它公开继承了NameValueCollection类,因此可以如下设置:

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);
req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");
其中
qwxhzgrpjbvpcgvuihnlc2ftzq==
是“阿拉丁:芝麻开门”的base64编码版本


只要您稍微了解一下HTTP协议,这些问题就会变得容易一些。我现在主要是在对自己说教:)

刚刚试过。它不起作用了。我认为当远程服务器需要基本的身份验证信息时,就需要HTTPBasicCredentials。现在我想,即使是我最初尝试的setCredentials函数也不是为了这个目的。。。另一个答案不是(使用poco编码器手动Base64编码)。我一直在以各种方式尝试,它总是给出相同的407错误。请看问题中的编辑。是的,我帮不了你更多的忙,因为我在这方面的知识也有点有限。我希望您现在已经找到了解决方案(或者您很快就会找到!)。除了基本身份验证之外,还有其他身份验证-摘要、NTLM、passport等。WinHTP为您提供此功能()。我很想知道POCO C++(或其他任何库)是否可以做同样的事情。你可以在CODEPAD.ORG上放一个测试用例吗?我很想对我的代理进行测试。我相信正如@StackedCrooked建议的那样,正确的标题是“代理授权”,而不是“代理身份验证”。您的实际代码是否使用了正确的代码?