zoukankan      html  css  js  c++  java
  • 【转】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

  • 相关阅读:
    C#=>递归反转栈
    C#=> 栈模仿堆的操作
    C# 栈=>随时读取栈中最小值
    vijos1574 摇钱树
    (二叉)堆
    分块大法好
    list
    动态规划——状压、树形
    区间动规平行四边形优化
    最长公共子序列(LCS)
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/6944949.html
Copyright © 2011-2022 走看看