【转】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完美代理访问
如果翻过墙,或者做过渗透啥的,肯定对代理不陌生,说白了,代理服务器就是一个中转站,你对目标网址的请求都会进过代理服务器去请求,类似于一个被你操控的傀儡,别人能知道的也只能是这个代理,从而提升安全性和访 ...
随机推荐
- easyui datagrid 动态改变行背景色
/*根据查询条件查询调度单列表*/ function InitGrid(queryData) { $("#dg").datagrid({ loadMsg: "数据加载中, ...
- 在Windows安装运行Kafka
一.安装JAVA JDK 1.下载安装包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...
- shell_语法
1.运算符: 1.基本语法:$((运算式))或$[运算式] 2.expr + n // 注意运算符中间有空格 再用expr时要加 ` ` 号,* 号加转义字符\ \* ,表示乘 2.判断语句 [ c ...
- jdk源码->集合->HashMap
一.hash算法 1.1 hash简介 hash,一般翻译为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出值就是散列值,这种转换是一种压缩映射,也就是散列的空间小于输入的空间, ...
- 设计模式之建造者模式(Buider)(5)
简介 在软件开发中,也会存在一些构造非常复杂的对象,这些对象拥有一系列的成员属性,这些成员属性有些是基本数据类型,有些是引用类型,总之就是一句话,这个对象的构建比较复杂.在这里我们就将复杂对象当做汽车 ...
- PHP 绘制验证码
使用PHP绘制验证码 可直接使用 // 验证码 <?php $checkCode = ""; for ($i=0; $i < 4; $i++) { // 十进制转换为 ...
- List中Add()与AddAll()的区别
我们在开发过程中经常会使用到List<Object> list=new ArrrayList<>(); 这个集合,Object 也可以是String.Integer等. 当我们 ...
- python学习笔记——python JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 1.JSON 函数 使用 JSON 函数需要导入 json 库:import json ...
- AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront(一)
013 S3 - 101 014 Create an S3 Bucket - Lab
- LeetCode题解之Split Linked List in Parts
1.题目描述 2.题目分析 主要是理解题意,将每个子链表应该分得的节点个数计算清楚.利用除数和余数的方法进行计算. 3.代码 vector<ListNode*> splitListToPa ...