C++ 我们如何使用Qt/C++;?

C++ 我们如何使用Qt/C++;?,c++,qt,parsing,http-headers,kde,C++,Qt,Parsing,Http Headers,Kde,我正在编写一个使用Qt/KDE libs的软件。目标是将HTTP头响应字段解析为结构的不同字段。到目前为止,HTTP头响应包含在QString中 它看起来像这样: "HTTP/1.1 302 Found date: Tue, 05 Jun 2012 07:40:16 GMT server: Apache/2.2.22 (Linux/SUSE) x-prefix: 49.244.80.0/21 x-as: 23752 x-mirrorbrain-mirror: mirror.averse.net

我正在编写一个使用Qt/KDE libs的软件。目标是将HTTP头响应字段解析为结构的不同字段。到目前为止,HTTP头响应包含在QString中

它看起来像这样:

"HTTP/1.1 302 Found
date: Tue, 05 Jun 2012 07:40:16 GMT
server: Apache/2.2.22 (Linux/SUSE)
x-prefix: 49.244.80.0/21
x-as: 23752
x-mirrorbrain-mirror: mirror.averse.net
x-mirrorbrain-realm: region
link: <http://download.services.openoffice.org/files/du.list.meta4>; rel=describedby; type="application/metalink4+xml"
link: <http://download.services.openoffice.org/files/du.list.torrent>; rel=describedby; type="application/x-bittorrent"
link: <http://mirror.averse.net/openoffice/du.list>; rel=duplicate; pri=1; geo=sg
link: <http://ftp.isu.edu.tw/pub/OpenOffice/du.list>; rel=duplicate; pri=2; geo=tw
link: <http://ftp.twaren.net/OpenOffice/du.list>; rel=duplicate; pri=3; geo=tw
link: <http://mirror.yongbok.net/openoffice/du.list>; rel=duplicate; pri=4; geo=kr
link: <http://ftp.kaist.ac.kr/openoffice/du.list>; rel=duplicate; pri=5; geo=kr
digest: MD5=b+zfBEizuD8eXZUTWJ47xg==
digest: SHA=A5zw6PkywlhiPlFfjca+gqIGLHA=
digest: SHA-256=HOrd0MMBzS8Ctljpe4PauwStijsnBKaa3gXO4L30eiA=
location: http://mirror.averse.net/openoffice/du.list
content-length: 329
connection: close
content-type: text/html; charset=iso-8859-1" 
找到HTTP/1.1 302 日期:2012年6月5日星期二07:40:16 GMT 服务器:Apache/2.2.22(Linux/SUSE) x前缀:49.244.80.0/21 x-as:23752 x-mirrorbrain-mirror:mirror.averse.net x-mirrorbrain-realm:区域 链接:;rel=descripeby;type=“应用程序/metalink4+xml” 链接:;rel=descripbeby;type=“应用程序/x-bittorrent” 链接:;rel=重复;pri=1;geo=sg 链接:;rel=重复;pri=2;geo=tw 链接:;rel=重复;pri=3;geo=tw 链接:;rel=重复;pri=4;geo=kr 链接:;rel=重复;pri=5;geo=kr 摘要:MD5=b+zfBEizuD8eXZUTWJ47xg== 文摘:SHA=A5ZW6PKYWLHIPFJCA+gqIGLHA= 摘要:SHA-256=HORD0MBZS8CTLJPE4PAUWSTIJSNBKAA3GXO4L30EIA= 地点:http://mirror.averse.net/openoffice/du.list 内容长度:329 连接:关闭 内容类型:text/html;字符集=iso-8859-1“ 除了自定义字段之外,标头响应中可能没有更多字段。
我找到的唯一可能的方法是手动搜索“link”、“digest”等字段,并创建一个以字段为键的QMap。不过,我想一定有更好的方法。如果您能帮助我,我将不胜感激。

HTTP头最初应该位于
QByteArray
(因为它是ASCII格式的,而不是UTF-16),但方法与
QString
相同:

  • 逐行拆分标题
  • 在冒号字符处拆分每行
  • 在存储2个结果字符串之前,请修剪其周围的所有空格(常规空格和
    '\r'
    字符)
QByteArray-httpHeaders=。。。;
QMap头;
//丢弃第一行
httpHeaders=httpHeaders.mid(httpHeaders.indexOf('\n')+1.trimmed();
foreach(QByteArray行,httpHeaders.split('\n')){
int colon=line.indexOf(“:”);
QByteArray headerName=line.left(冒号).trimmed();
QByteArray headerValue=line.mid(冒号+1.trimmed();
headers.insertMulti(headerName,headerValue);
}

Q字符串中是否有如上所述的换行符?你能不能把它作为一个标记来拆分?@Dennis是的,上面的QString中有很多新行。谢谢你的建议。