Qt发起Http/Https请求
1. BurpSuite抓包
1.1 设置代理
burpsuite代理设置
浏览器代理设置(chrome),其他浏览器同理。
地址栏输入 chrome://settings/,
打开代理设置
设置代理端口
如果使用了代理插件,比如switchomega,可以这么设置
这样当选择使用代理选项的时候,请求包的数据也会被burpsuite拦截到。
1.2 导入证书
浏览器地址栏输入 http://burp/,如果有使用代理插件,建议先停用插件,待正确导入证书后开启使用,后续不再有影响。
点击CA Certificate,下载证书cacert.der
浏览器地址栏输入chrome://settings/
选择 “受信任的根证书颁发机构”,导入证书
下一步,选择证书,导入成功。
1.3 拦截抓包
浏览器地址栏输入地址访问,www.baidu.com
intercept is off 拦截已关闭
intercept is on 拦截已开启
可以看到请求包已经被我们拦截下来了。
选择放行Forward或者点击Intercept is on关闭拦截就会把数据包放行出去。
HTTP history中可以观察到已经拦截到的请求地址
如果有过滤的需求,可点击过滤
点击链接,会显示请求和响应等数据
下面自我发挥……
Qt发起http/https请求
1. 配置openssl
qt自身是不支持https的,如果想要使用https发起请求,要进行相关配置。
1.1 查看qt支持哪些协议
可以通过以下代码查看使用的qt版本支持哪些协议。
pro文件设置
添加network支持,QT += network
查看qt支持哪些协议
#include <QNetworkAccessManager>
#include <QDebug>
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
qDebug() << manager->supportedSchemes();
2 配置ssl2.1 下载openssl
http://slproweb.com/products/Win32OpenSSL.html
选择版本,就选择这个版本了
2.2 下载后直接安装,然后加入到系统环境变量(我的安装目录是D:\OpenSSL-Win32\bin)
2.3 配置qt支持https
LIBS += -L"D:/OpenSSL-Win32/lib" -llibeay32
LIBS += -L"D:/OpenSSL-Win32/lib" -lssleay32
INCLUDEPATH += $$quote(D:/OpenSSL-Win32/include)
可以测试ssl是否配置成功或者查看ssl的错误提示。
#include <QSslSocket>
qDebug() <<"ssl:" << QSslSocket::sslLibraryBuildVersionString();
2.4 编写程序这里不必要的业务逻辑就不在写了,主要放上https请求的代码,着重关注和http请求的不同点。
bool MainWindow::SendHttp()
{
/*QNetworkAccessManager *manager = new QNetworkAccessManager(this);
qDebug() << manager->supportedSchemes();*/ qDebug() <<"ssl:" << QSslSocket::sslLibraryBuildVersionString(); QNetworkRequest request;
QSslConfiguration config; QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("127.0.0.1");
proxy.setPort();
QNetworkProxy::setApplicationProxy(proxy); //url
request.setUrl(QUrl(strWww)); QSslConfiguration conf = request.sslConfiguration();
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1_0);
request.setSslConfiguration(config); //header
auto it = m_headerMap.begin();
while(it != m_headerMap.end())
{
//qDebug() << it->second.m_skey.toLatin1() << it->second.m_sval.toLatin1() << '\n';
request.setRawHeader(it->second.m_skey.toLatin1(), it->second.m_sval.toLatin1());
++it;
} //nam
QNetworkAccessManager qnam;
qDebug() << qnam.supportedSchemes(); // 开启一个局部的事件循环,等待响应结束,退出
QEventLoop loop;
QTimer timer;
//发出请求
QNetworkReply *reply = qnam.get(request);
QObject::connect(&qnam,SIGNAL(finished(QNetworkReply *)),&loop,SLOT(quit()));
//请求结束并下载完成后,退出子事件循环
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
//超时退出
QObject::connect(&timer,SIGNAL(timeout()),&loop,SLOT(quit()));
//超时设置5秒钟
timer.start();
//开启子事件循环
loop.exec();
//.... if (reply->error() == QNetworkReply::NoError)
{
QVariant statusCodeV =
reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); if(statusCodeV.toInt() ==
/*这里写了这个readAll(),
* 下面readAll()就取不出数据了
* && !reply->readAll().isEmpty()
*/
)
{ //写入文件
std::ofstream ofile;
ofile.open("test.txt");
if(ofile.fail())
{
qDebug() << "error ofile" << '\n';
}
//reply->readAll().isEmpty()
ofile << reply->readAll().toStdString();
ofile.flush();
ofile.close();
}
} return true;
}
Qt发起Http/Https请求的更多相关文章
- HttpClient发起Http/Https请求工具类
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl ...
- [QT] QT5.12 HTTPS请求 TLS initialization failed
#前言 接触到了Qt的网络编程 然后尝试对一个http页面请求获取源码 是可以的 但是当对https界面发出请求的时候总是错误 TLC什么的初始化失败 百度也是没有结果 然后网上各种方法 比如说编译O ...
- php 使用curl发起https请求
今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: erro ...
- 使用curl发起https请求
"SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:S ...
- http 使用curl发起https请求报错的解决办法
使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: error:1409008 ...
- 用curl发起https请求
使用curl发起https请求 使用curl如果想发起的https请求正常的话有2种做法: 方法一.设定为不验证证书和host. 在执行curl_exec()之前.设置option $ch = cur ...
- 用curl获取https请求时出现错误的处理
今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: erro ...
- requests发送HTTPS请求(处理SSL证书验证)
1.SSL是什么,为什么发送HTTPS请求时需要证书验证? 1.1 SSL:安全套接字层.是为了解决HTTP协议是明文,避免传输的数据被窃取,篡改,劫持等. 1.2 TSL:Transport Lay ...
- Qt 之 使用 https发送 HTTP请求(使用OPENSSL库)
一.简述 在使用Qt发送HTTP请求中一般使用的链接都是http://前缀,而有的服务器支持 https://前缀的链接,而Qt本身是支持https的,但是https访问需要用到SSL认证,而QT默认 ...
随机推荐
- 【Java基础】9、Enumeration接口和Iterator接口的区别
package java.util; public interface Enumeration<E> { boolean hasMoreElements(); E next ...
- 利用反射调用注解,模仿Spring
简介 在开发中,我们经常用的就是利用@RequestMapping来调用我们自己的逻辑,现在我们来创建属于自己的注解模仿一下它. 1.新建属于自己的注解@SeayaMapping @Target({E ...
- canvas-arc.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微信小程序日历课表
最近项目中使用到了日历,在网上找了一些参考,自己改改,先看效果图 wxml <view class="date"> <image class="dire ...
- JS中的数学方法
1 . Math.ceil() 向上取整 2. Math.floor() 向下取整 3. Math.round() 四舍五入取整 4. Math.random() 生成 ...
- 我的Java之旅 第七课 JAVA WEB 会话管理
1.隐藏域 隐藏域其实不是Servlet/JSP的会话管理机制的内容,但它能实现简单的页面状态记录的效果. 2.Cookie Cookie类 setMaxAge() 设置有效期 ...
- python自动化开发-6-常用模块-续1
json和pickle模块:用于序列化的模块. 序列化:我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serializatio ...
- JSP内置对象——pageContext对象和config对象
它对应的常用方法有: 现在,我新建一个“pageContext.jsp”页面,可以获得“session_page1.jsp”这个页面中保存的用户名: pageContext.jap: session_ ...
- Java并发编程(七)深入剖析ThreadLocal
一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多.可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个 ...
- 【Java入门提高篇】Day30 Java容器类详解(十二)TreeMap详解
今天来看看Map家族的另一名大将——TreeMap.前面已经介绍过Map家族的两名大将,分别是HashMap,LinkedHashMap.HashMap可以高效查找和存储元素,LinkedHashMa ...