我已经和Poco网络库玩了一段时间了,它很不错。非常方便,容易理解。
我能够设置一个代理地址,这是说407代理授权是必需的,正确的。我以为
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.setCredentials(scheme, authInfo);我尝试了一些值,比如方案中的"basic“、”明文“和authInfo中的"user:password”。似乎不起作用。谷歌帮不上忙。
以前有人用Poco网做过这种事吗?或者,由于我对代理身份验证的无知,这种用法很明显,而且我无法让它工作?请指点。
编辑:经过更多的操作后,我认为在远程服务器等待身份验证信息登录时使用了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);需要帮助。
编辑:基于@Stacked弯曲建议的解决方案,我尝试在发出请求之前将代理身份验证详细信息设置为请求头,而在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);发布于 2009-08-25 12:40:47
您可能需要将代理授权字段添加到HTTP头中。Poco的HTTPRequest类对此没有专门的方法。但是,由于它公开继承了NameValueCollection类,所以可以这样设置它:
req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");其中QWxhZGRpbjpvcGVuIHNlc2FtZQ==是base64编码版本的“阿拉丁:开放芝麻”。
只要稍微了解一下HTTP协议,这些问题就会变得更容易。我现在主要是自言自语:)
发布于 2009-08-25 11:18:12
我自己也没有使用过这个,但是您看过HTTPBasicCredentials类了吗?它通过其身份验证方法结束对req.setCredentials的调用。你最终会得到这样的结果:
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);https://stackoverflow.com/questions/1327485
复制相似问题