赞助

libcurl 设置代理,通过Fiddler可以进行抓包

转载:https://blog.csdn.net/jaryguo/article/details/53021923

转载:https://www.cnblogs.com/miantest/p/7289694.html

转载:https://www.cnblogs.com/joshua317/p/8670923.html

转载:https://www.cnblogs.com/woaixuexi9999/p/9247705.html(Fiddler配置教程)

转载:https://blog.csdn.net/u013908944/article/details/85076833(Fidler抓postman模拟请求的包)

转载:https://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html(HTTP协议 (六)状态码详解)

转载:https://blog.csdn.net/wangjun5159/article/details/54024413(fiddler 图标解释)

用libcurl在项目开发过程中,调试阶段需要进行抓包测试,但Fiddler不能收到应用的Http连接。

Google了一下,因为应用用了libcurl的接口来创建HTTP连接,如果要使用Fiddler,需要在代码中插入类似如下的代码:

curl_easy_setopt(m_curl, CURLOPT_PROXY, "127.0.0.1:8888");

其中8888是Fiddler默认设置的一个监听端口,如果在Option中修改了,则需要替换为响应的端口号。

代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。

void Test()
{
    CURL* curl;
    char *url = "http://develop.test.com";
    std::stringstream out;
    curl = curl_easy_init();

    //设置url
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_PROXY, "127.0.0.1:8888");
    curl_easy_setopt(curl, CURLOPT_POST, 0);//设置为非0表示本次操作为POST

    // 设置接收数据的处理函数和存放变量
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);//设置回调函数
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);

    // 执行HTTP GET操作
    CURLcode res = curl_easy_perform(curl);
    if (res != CURLE_OK) {
        fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
    }

    // 接受数据存放在out中,输出之
    //cout << out.str() << endl;
    string str_json = out.str();


    printf("%s", str_json.c_str());
    curl_easy_cleanup(curl);

}

注:如果代码中加入了设置代理,只有在抓包工具运行的情况下,http才能请求成功,进而能抓到数据;否则http会请求失败;

WireShark则纯粹是在底层监听计算机的所有出入数据(需要安装WinPCap),什么数据都能检测到。

WireShark的使用教程:https://www.cnblogs.com/Jerry-zhao2110/p/8282427.html

 

二、Fiddler 抓取https请求配置

转载:https://www.cnblogs.com/joshua317/p/8670923.html

1.清除C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件(首次安装fiddler请忽略)

2.清除电脑上的根证书,WIN+R快捷键,输入:certmgr.msc, 然后回车,查找所有fiddler证书,然后删除。(首次安装fiddler请忽略)

 

3.清除浏览器上的证书文件 ,此处需要仔细查找带有FiddlerRoot的字样,并删除,以谷歌浏览器为例说明,在浏览器上输入: chrome://settings/,(首次安装fiddler请忽略)

 

 4.打开fiddler,点击工具栏中的Tools—>Options,点击Actions,选择最后一项,Reset All certificates,然后关闭

 

注意:以上步骤假设是已经安装fiddler的情况下需要做的处理 ,若已安装,建议执行上述步骤,然后进行重新安装;

 

用Fiddler抓libcurl发起的https的包,需要在代码中设置

/*
        * If you want to connect to a site who isn't using a certificate that is
        * signed by one of the certs in the CA bundle you have, you can skip the
        * verification of the server's certificate. This makes the connection
        * A LOT LESS SECURE.
        *
        * If you have a CA cert for the server stored someplace else than in the
        * default bundle, then the CURLOPT_CAPATH option might come handy for
        * you.
*/
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

 

 Fiddler中session前面快捷图标的含义

 

posted @ 2018-11-09 13:29  车臣  阅读(3403)  评论(0编辑  收藏  举报