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

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/6944949.html
Copyright © 2011-2022 走看看