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)需要注意的一点的更多相关文章

  1. WCF:传输EntityFramework 实体类的POCO 代理

    WCF传输EntityFramework 实体类的POCO 代理 Windows Communication Foundation (WCF) 不能对代理进行直接序列化或反序列化,因为 DataCon ...

  2. 原生Ajax讲解

    典型的http通信:浏览器向服务器发出请求,服务器向客户端返回响应,浏览器重新加载页面,这种不连续的页面加载方式导致用户的体验变得杂乱,缺乏连贯性. 如: 在一般的web应用程序中,用户填写表单字段然 ...

  3. springmvc中request的线程安全问题

    SpringMvc学习心得(四)springmvc中request的线程安全问题 标签: springspring mvc框架线程安全 2016-03-19 11:25 611人阅读 评论(1) 收藏 ...

  4. CAS 在 Tomcat 中实现单点登录

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统 中,用户只需要登录一次就可以访问所有相互信任的应用系统.CA ...

  5. 【IBM】使用 CAS 在 Tomcat 中实现单点登录

    来源: IBM Developer http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/ 张 涛 (zzhangt@cn.ibm.com ...

  6. 使用 CAS 在 Tomcat 中实现单点登录

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.CAS ...

  7. cas改造随笔

    原http://www.cnblogs.com/hellowood/archive/2010/08/05/1793364.html 键字: sso域名:cas.server.com 登陆地址(spri ...

  8. cas sso单点登录系列1_cas-client Filter源码解码(转)

    转:http://blog.csdn.net/ae6623/article/details/8841801?utm_source=tuicool&utm_medium=referral /* ...

  9. 零基础http代理http完美代理访问

    如果翻过墙,或者做过渗透啥的,肯定对代理不陌生,说白了,代理服务器就是一个中转站,你对目标网址的请求都会进过代理服务器去请求,类似于一个被你操控的傀儡,别人能知道的也只能是这个代理,从而提升安全性和访 ...

随机推荐

  1. elasticsearch6.7 04.API规范

    API Conventions elasticsearch的REST的API是使用HTTP的JSON格式暴露的. 除非另有说明,本章中列出的约定可以在整个REST API中应用. 多索引 索引名称支持 ...

  2. Java三大特性:封装,继承,多态

    java提高篇(一)-----理解java的三大特性之封装 概念: 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独 ...

  3. 悟空模式-java-原型模式

    [却说那妖精与大圣斗经半日,不分胜败.行者把棒丢起,叫一声“变!”就以一变十,以十变百,以百变千,半天里,好似蛇游蟒搅,乱打妖邪.妖邪慌了手脚,将身一闪,化道清风,即奔碧空之上逃走.行者念声咒语,将铁 ...

  4. python-桥接模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 有些类在功能设计上要求,自身包含两个或两个以上变化的因素,即该类在二维或者多维上 ...

  5. CSS3和HTML5新增特性及使用(保留方便查看)

    CSS3 1.边框图片 border-image: url(test.png) 10/10px;  outline:10px solid #ff0;outline-offset:15px;边框的边框, ...

  6. 初识DOM(文档对象模型)

    什么是DOM 什么叫做DOM呢? • DOM的全称是Document Object Model 文档对象模型,DOM定义了表示和修改文档所需的对象.这些对象的行为和属性以及这些对象之间的关系. • D ...

  7. bzoj1758Wc10重建计划——solution

    1758: [Wc2010]重建计划 Time Limit: 40 Sec  Memory Limit: 162 MBSubmit: 4707  Solved: 1200[Submit][Status ...

  8. 【查找数字x第k为上的数字】

    #include<stdio.h> #include<math.h> // 求x用10进制表示时的数位长度 int len(int x){ ) ; )+; } // 取x的第k ...

  9. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

  10. Maven学习(三)maven原理概念详述

    maven相关概念 maven坐标 Maven世界拥有大量构建,当我们需要引用依赖包是,需要用一个用来唯一标识去确定唯一的一个构建.如果拥有了统一规范,就可以把查找工作交给机器. 类似于空间找点的坐标 ...