【转】Poco 1.4.2 HTTPClientSession/HTTPRequest 使用使用代理(proxy)需要注意的一点
Poco 1.4.2 HTTPClientSession/HTTPClientSession 在使用代理的时候,request的URI不能包含协议和主机。否则会出错。
不使用代理的时候,以下代码能正常工作。
// no error handling ...
string strURI = "http://www.baidu.com/query?r=xxx";
Poco::URI uri(strURI); Poco::Net::HTTPClientSession session;
session.setHost(uri.getHost());
session.setPort(uri.getPort()); // Proxy switch:
// session.setProxy(<proxyHost>, <proxyPort>); Poco::Net::HTTPRequest req("HTTP/1.1");
req.setURI(strURI); session.sendRequest(req);
蛋是如果启用Proxy(取消掉对上面setProxy那句代码的注释),则上面的代码会报错。
抓包发现它发出去的HTTP请求成了:
GET http://www.baidu.com:80http://www.baidu.com/query?r=xxx
跟到Poco源代码中,发现原因为:
// in poco/net/HTTPClientSession.cpp
//
if (!_proxyHost.empty())
{
request.setURI(proxyRequestPrefix() + <strong>request.getURI()</strong>);
proxyAuthenticate(request);
}
解决的方法,
1) 修改 poco/net/HTTPClientSession.cpp
request.setURI(proxyRequestPrefix() + Poco:URI(request.getURI()).getPathEtc());
或者,2)
使用的时候,给HTTPRequest传入URI的时候不包含schema, host, port
如下:
// no error handling ...
string strURI = "http://www.baidu.com/query?r=xxx";
Poco::URI uri(strURI);
Poco::Net::HTTPClientSession session;
session.setHost(uri.getHost());
session.setPort(uri.getPort());
// Proxy switch: on
session.setProxy(<proxyHost>, <proxyPort>);
Poco::Net::HTTPRequest req("HTTP/1.1");
req.setURI(<strong>uri.getPathEtc()</strong>);
session.sendRequest(req);
from:http://blog.csdn.net/easyvcr/article/details/6855176
【转】Poco 1.4.2 HTTPClientSession/HTTPRequest 使用使用代理(proxy)需要注意的一点的更多相关文章
- WCF:传输EntityFramework 实体类的POCO 代理
WCF传输EntityFramework 实体类的POCO 代理 Windows Communication Foundation (WCF) 不能对代理进行直接序列化或反序列化,因为 DataCon ...
- 原生Ajax讲解
典型的http通信:浏览器向服务器发出请求,服务器向客户端返回响应,浏览器重新加载页面,这种不连续的页面加载方式导致用户的体验变得杂乱,缺乏连贯性. 如: 在一般的web应用程序中,用户填写表单字段然 ...
- springmvc中request的线程安全问题
SpringMvc学习心得(四)springmvc中request的线程安全问题 标签: springspring mvc框架线程安全 2016-03-19 11:25 611人阅读 评论(1) 收藏 ...
- CAS 在 Tomcat 中实现单点登录
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统 中,用户只需要登录一次就可以访问所有相互信任的应用系统.CA ...
- 【IBM】使用 CAS 在 Tomcat 中实现单点登录
来源: IBM Developer http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/ 张 涛 (zzhangt@cn.ibm.com ...
- 使用 CAS 在 Tomcat 中实现单点登录
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.CAS ...
- cas改造随笔
原http://www.cnblogs.com/hellowood/archive/2010/08/05/1793364.html 键字: sso域名:cas.server.com 登陆地址(spri ...
- cas sso单点登录系列1_cas-client Filter源码解码(转)
转:http://blog.csdn.net/ae6623/article/details/8841801?utm_source=tuicool&utm_medium=referral /* ...
- 零基础http代理http完美代理访问
如果翻过墙,或者做过渗透啥的,肯定对代理不陌生,说白了,代理服务器就是一个中转站,你对目标网址的请求都会进过代理服务器去请求,类似于一个被你操控的傀儡,别人能知道的也只能是这个代理,从而提升安全性和访 ...
随机推荐
- 【Tomcat】部署Web到tomcat的四种方式
一.静态部署 1.直接将web项目文件件拷贝到webapps 目录中 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JSP ...
- 使用Druid网上监控
0.添加依赖 <!--druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artif ...
- Hanoi问题 算法
问题描述:假设有3个分别命名为A.B.C的塔座,在塔座A上插有n个直径大小各不同,一小到大标号为1,2,….,n的圆盘,要求将塔座A上的n个圆盘移动到C盘上,并且仍按原来的顺序叠排. 同时遵循下列规则 ...
- php面向对象精要(1)
1.静态属性与方法 每一个类的实例拥有自己的属性和方法,每一个类也可以包含静态属性,静态属性不属于类的任何实例,可以把静态属性理解成存储在类中的全局变量,可以在任何地方通过类名引用静态属性. < ...
- form图片上传遇到错误
org.springframework.web.multipart.MultipartException: The current request is not a multipart request ...
- 设计模式(21)--Strategy(策略模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而 ...
- 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll
一.问题描述 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll 二.解决方法 首先进入 http://www.microsoft.com/zh-CN/download/det ...
- Fiddler抓包使用教程-扫盲篇
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72823370 本文出自[赵彦军的博客] 1.什么是抓包? 不同主机之间的数据通信都 ...
- linux安装activemq
ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言 ...
- NodeJS中MySql的增删改查操作
纯粹记录一下最基础写法,几乎没有写什么逻辑,写法也并不是很完善(因为我自己也刚刚摸索出来这么写可以...= =!) 望高手指教 也希望能够帮到比我还新的新手.... //1.insert操作 ...