c++ - HTTP标头和数据响应,如何解码数据中的%?
问题描述
我正在从 Qt 5.15.2 应用程序生成 HTTP 响应,响应通常类似于:
HTTP/1.1 200 OK
Server: XMLMPAM
Access-Control-Allow-Origin: *
Date: Sun, 24 Jan 2021 07:56:45 GMT
Content-Length: 65
Connection: Closed
Content-Type: text/html; charset=utf-8
<!DOCTYPE html><html><body>{%22msgType%22:%22hb%22}</body></html>
这是产生这个的代码:
static const QString scstrLineTerm("\r\n");
QString strWrapper("<!DOCTYPE html><html><body>" + arybytData + "</body></html>")
,strDateTime(dtUTC.toString("ddd, dd MMM yyyy hh:mm:ss") + " GMT")
,strDataLength(QString::number(strWrapper.length()))
,strHTTP = QString("HTTP/1.1 200 OK%1"
"Server: XMLMPAM%2"
"Access-Control-Allow-Origin: *%3"
"Date: %4%5"
"Content-Length: %6%7"
"Connection: Closed%8"
"Content-Type: text/html; charset=utf-8%9"
"%10%11"
"%12").arg(scstrLineTerm
,scstrLineTerm
,scstrLineTerm
,strDateTime, scstrLineTerm
,strDataLength, scstrLineTerm
,scstrLineTerm
,scstrLineTerm
,scstrLineTerm, scstrLineTerm
,strWrapper);
这是响应中来自浏览器的 URL:
http://localhost:8123/?{%22msgType%22:%22hb%22}
浏览器得到响应:
{%22msgType%22:%22hb%22}
我想要的是没有转义码的响应,所以它看起来像:
{"msgType":"hb"}
解决方案
解决了:
QString strWrapper("<!DOCTYPE html><html><body>" + QUrl::fromPercentEncoding(arybytData) + "</body></html>")
,strDateTime(dtUTC.toString("ddd, dd MMM yyyy hh:mm:ss") + " GMT")
,strDataLength(QString::number(strWrapper.length()))
,strHTTP;
strHTTP = QString("HTTP/1.1 200 OK%1"
"Server: XMLMPAM%2"
"Access-Control-Allow-Origin: *%3"
"Date: %4%5"
"Content-Length: %6%7"
"Connection: Closed%8"
"Content-Type: text/html; charset=utf-8%9"
"%10%11"
"%12").arg(scstrLineTerm
,scstrLineTerm
,scstrLineTerm
,strDateTime, scstrLineTerm
,strDataLength, scstrLineTerm
,scstrLineTerm
,scstrLineTerm
,scstrLineTerm, scstrLineTerm
,strWrapper);
回复:
{"msgType":"hb"}
推荐阅读
- swift - INSearchForNotebookItemsIntent 未达到 IntentsUI 扩展
- laravel - 在 laravel 文件管理器中将文件和照片文件夹更改为一个存储文件夹
- postgresql - 无法在 Ubuntu 17.10 上使用 postgis 安装 postgres 9.3
- android - DateUtils.getRelativeTimeSpanString 返回时间差,但结果包括当前时间
- angular - Angular / Material / Datepicker - 找不到 DateAdapter 的提供者
- javascript - 提交后模态不隐藏
- python - 使用从值除以数据透视表向量获得的百分比值为现有 csv 创建新列?
- excel - 用于在 Google Drive 中填写表格的宏不发送任何信息
- java - java GUI中这些被阻止的部分是什么
- sql - VB - 将 linq 中的属性设置为 sql 到此实例