代码之家  ›  专栏  ›  技术社区  ›  Sahas

PoCo NET C++库中的代理认证

  •  6
  • Sahas  · 技术社区  · 15 年前

    我和poco-net图书馆玩了一段时间了,很不错。非常方便,容易理解。

    我可以设置一个代理地址,它表示需要407个代理授权。我想

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

    我在Scheme中尝试了“基本”、“纯文本”和AuthInfo中的“用户:密码”等值。它似乎不起作用。谷歌没有帮助。

    以前有人用过Poco网吗?或者这种用法很明显,但由于我对代理身份验证的无知,我无法使其正常工作?请教。

    编辑: 在更多的尝试之后,我认为当远程服务器期望登录身份验证信息时,会使用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建议的解决方案,我尝试在发出请求之前将代理身份验证详细信息设置到请求头,在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);
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   StackedCrooked    15 年前

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

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

    在哪里? QWxhZGRpbjpvcGVuIHNlc2FtZQ== 是“阿拉丁:芝麻开门”的base64编码版本。

    一旦您了解了一点HTTP协议,这些问题就会变得更加容易。我现在主要是在自言自语:)

        2
  •  1
  •   Steve Beedie    15 年前

    我自己没用过这个,但你看过 HTTPBasicCredentials 班级?它通过其身份验证方法结束对req.setcredentials的调用。你最终会得到一些符合以下原则的东西:

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