人们! 我正在寻找解析服务器响应的最佳和最有效的方法,其中包含HTML和XML内容。响应来自我需要每5分钟轮询一次的服务器(目前在列表中大约有半数,但很快就会加倍)。响应存储在缓冲区中作为平面文本(从套接字获取)。所以,我需要解析HTML部分,如果成功(发现强制性的东西),我应该尝试解析XML部分并获取统计信息以存储在DB中。答案是这样的:
HTTP/1.0 200 OK
Connection: close
Content-Length: 682
Content-Type: text/xml; charset=utf-8
Date: Sun, 09 Mar 2014 15:44:52 GMT
Last-Modified: Sun, 09 Mar 2014 15:44:52 GMT
Server: DrWebAV-DeskServer/REL-610-AV-6.02.0.201311040 Linux/x86_64 Lua/5.1.4 OpenSSL/1.0.0e
<?xml version="1.0" encoding="utf-8"?><avdesk-xml-api API='2.1.0' API_BUILD='20130709' branch='REL-610-AV' oper='get-server-info' rc='true' timestamp='20140309154452987' version='6.02.0.201311040'><server><id>00c1d140-d21d-b211-a828-b62919c4250d</id><platform>Linux 2.6.39-gentoo-r3 x86_64 (4 SMP Mon Oct 24 11:04:40 YEKT 2011)</platform><version>6.02.0.201311040</version><statistics from='20140301000000000' till='20140309235959999'><noviruses/><stations total='101'><online>5</online><deinstalled>21</deinstalled><blocked>0</blocked><expired>81</expired><offline>96</offline><activated>74</activated><unactivated>27</unactivated></stations></statistics></server></avdesk-xml-api>
可能是smth。像这样
HTTP/1.0 401 Authorization Required
Cache-Control: post-check=0, pre-check=0
Connection: close
Content-Length: 421
Content-Type: text/html; charset=utf-8
Date: Sun, 09 Mar 2014 15:44:22 GMT
Expires: Date: Sat, 27 Nov 2004 10:18:15 GMT
Last-Modified: Date: Sat, 27 Nov 2004 10:18:15 GMT
Pragma: no-cahe
Server: DrWebAV-DeskServer/REL-610-AV-6.02.0.201311040 Linux/x86_64 Lua/5.1.4 OpenSSL/1.0.1
WWW-Authenticate: Basic realm="Dr.Web XML API area"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><TITLE>Unauthorized</TITLE><BODY><STRONG>Unauthorized</STRONG><P>The error "401 Unauthorized" occured while processing request you had sent.<P><BR><BR><I>Access denied or your browser does not support HTTP authentication!</I><BR><P><BR><BR><HR><P>Dr.Web ® AV-Desk Server REL-610-AV 6.02.0.201311040 Linux/x86_64 Lua/5.1.4 OpenSSL/1.0.1</BODY></HTML>
关于HTML部分我基本上对HTTP / 1.0 STRING和Server:STRING的东西感兴趣,然后需要按标签进行XML解析,如果授权成功的话。 我发现,libxml2适合解析HTML / XML的东西,但无法找到任何真实的例子如何使用它,只是一些主要的界面描述。所以,需要帮助。
答案 0 :(得分:0)
libxml2
的代码示例为here
邮件列表很友好,代码成熟,质量很好。
但是,您的示例中没有任何内容表明您需要解析HTML。您需要解析(我认为)HTTP来处理标头(并从HTTP响应中检测401错误),然后解析XML内容。将HTTP标头解析到您需要的级别是微不足道的(仅strtok
分隔换行符的响应和第一行有您需要的答案)。响应的主体在双线中断后开始(我认为你的第二个例子有一个粘贴错误)。这样可以简化处理HTTP标头和XML(无HTML解析)的任务。