6

我一直在玩 Poco Net 库,它非常好。非常方便且易于理解。

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

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

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

以前有人用 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);
4

2 回答 2

2

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

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

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

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

于 2009-08-25T12:40:47.433 回答
1

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

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);
于 2009-08-25T11:18:12.950 回答