您尚未登录。

楼主 # 2023-02-17 17:50:44

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

arm板上qt http可以下载,https不能下载,无报错。

qt程序,从一个http网页上下载,返回301,得到重定向网址,是个https网址,再次qt下载。

同一个程序,在pc上的ubuntu5.13.2,编译后,最后可以下载到文件。
交叉编译到arm板上执行,http get没问题,可以得到正确的重定向网址,再get就直接触发QNetworkReply的finished信号了,没有读取到数据。
arm板上是qt5.6,也有libssl库,而且,通过Qsslsocket::suportsssl()函数,返回的也是true,说明qt能调用ssl库。
但,问题在哪里呢?

离线

楼主 #1 2023-02-20 10:27:32

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: arm板上qt http可以下载,https不能下载,无报错。

今天又试了下,qt get    https:www.baidu.com
PC上编译后确实可以收到数据。
交叉编译后arm板上,仍是直接触发finished信号,没读到任何数据。

看样子是arm板上的qt,https有问题,http正常。但不知道问题在哪里。

离线

#2 2023-02-20 10:57:36

benlypan
会员
注册时间: 2021-07-08
已发帖子: 49
积分: 133.5

Re: arm板上qt http可以下载,https不能下载,无报错。

是不是板子里没放证书?Qt里可以尝试下忽略SSL错误

离线

楼主 #3 2023-02-20 13:59:13

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: arm板上qt http可以下载,https不能下载,无报错。

benlypan 说:

是不是板子里没放证书?Qt里可以尝试下忽略SSL错误

板子里搜*cert*相关,搜到这:

/etc/ssl/certs

是个目录,不过是空的...

----------------------------------

qDebug() << QNetworkReply->errorString() << endl;

得到:

"SSL handshake failed"

最近编辑记录 Gentlepig (2023-02-20 14:20:32)

离线

楼主 #4 2023-02-20 14:42:44

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: arm板上qt http可以下载,https不能下载,无报错。

之前的代码没有设置QSslConfigruation相关,又搜了个例程加上去,貌似能连上了,虽然最后不知道为何又多了个“Unkonwn error"

 14     void httpStart(const QUrl &requestedUrl)
 13     {
 12         this->url = requestedUrl;
 11         QNetworkRequest request(this->url);
 10         QSslConfiguration config;                               //该行之前没有;
  9         config.setPeerVerifyMode(QSslSocket::VerifyNone);  //该行之前没有;
  8         config.setProtocol(QSsl::TlsV1_0);                  //该行之前没有;
  7         request.setSslConfiguration(config);                //该行之前没有;
  6         this->reply = qnam.get(request);
  5 //        this->reply = qnam.get(QNetworkRequest(this->ur↷
  4 
  3         connect(this->reply, &QNetworkReply::finished, th↷
  2         connect(this->reply, &QIODevice::readyRead, this,↷
  1         connect(this->reply, &QNetworkReply::downloadProg↷
243     }
:/mnt# ./qmqtt_example
true "OpenSSL 1.0.2j  26 Sep 2016" "OpenSSL 1.0.2j  26 Sep 2016"
("ftp", "file", "qrc", "http", "https", "data")
""

http ready to read.

"<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace(\"https://\",\"http://\"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv=\"refresh\" content=\"0;url=http://www.baidu.com/\"></noscript>\r\n</body>\r\n</html>"
227 227

227 227

http finished.

("Accept-Ranges", "Cache-Control", "Connection", "Content-Length", "Content-Type", "Date", "P3p", "Pragma", "Server", "Set-Cookie", "Strict-Transport-Security", "Traceid", "X-Frame-Options", "X-Ua-Compatible")

""
"Unknown error"
^C

最近编辑记录 Gentlepig (2023-02-20 16:16:26)

离线

#5 2023-02-21 08:55:58

benlypan
会员
注册时间: 2021-07-08
已发帖子: 49
积分: 133.5

Re: arm板上qt http可以下载,https不能下载,无报错。

试试 this->reply->ignoreSslErrors(),新加上的 ssl 配置不需要。另外也可以从 pc 机上复制那些证书过去

离线

楼主 #6 2023-02-24 11:21:34

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: arm板上qt http可以下载,https不能下载,无报错。

再记录下,之前在ubunt18.04上跑这个程序,https下载正常。复制到ubunt22.04后,有提示ssl:

qt.network.ssl:QSslSocket: cannot resolve EVP_PKEY_base_id
qt.netwrok.ssl:QSslSocket: cannot resolve SSL_get_peer_certificate

查看sll版本,发现ubuntu22.04用的是openssl3.0.2,qt5.13.2构建用的是openssl1.1.1b。

下载了openssl1.1.1,解压后,设为动态库编译,make后得到的libcrypto和libssl,复制到qt目录下的/gcc_64/lib目录下,再运行程序就不报错了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn