-1

我正在使用 QNetworkAccessManager 从以下新闻门户中读取新闻是一个示例

QNetworkReply *reply;
QNetworkAccessManager *network = new QNetworkAccessManager;
network->setNetworkAccessible(QNetworkAccessManager::Accessible);
reply = network->get(QNetworkRequest(QUrl(“http://news.yahoo.com/rss/sports”))); 

另一个测试“<a href="http://news.yahoo.com/rss/baseball" rel="nofollow">http://news.yahoo.com/rss/baseball”的网址</p>

一些 url 将获得正确的 xml 内容,但很少有人不会收到正确的内容。

当我尝试将 qt 示例用于新闻阅读器时,我遇到了类似的问题。QtSDK/demos/4.7/declarative/rssnews

获得的无效 XML 示例如下所示:(正确的 XML 应具有标题、描述标签)

<?xml version=“1.0” encoding=“UTF-8” ?><!DOCTYPE html PUBLIC “-//WAPFORUM//DTD XHTML Mobile 1.0//EN” “http://www.wapforum.org/DTD/xhtml-mobile10.dtd”&gt;<html lang=“en” xml:lang=“en”&gt;<head><title>Sports News Headlines – Yahoo! News</title><meta http-equiv=“Content-Type” content=“text/html; charset=utf-8”/><style type=“text/css”&gt;body{color:#353535;background:#ffffff;font-family:Sans-serif}a{color:#006ec2;text-decoration:none}a.z, a.y, a.x, a.w, a.v, .u a{text-decoration:none}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6{padding:0;margin:0}img{border:0}hr{display:none;visibility:hidden;width:0}#page{background:
………………………..
…………………………………
…………………………………………….
cir0Pb17r9HJLHyL2H6qC_rG”&gt;<span>Help</span></a></div><div class=“o p “&gt;© 2013 Yahoo! Inc. All rights reserved</div></div></div></div></div>http://us.bc.yahoo.com/b?P=92jfVTc2LjFqpOI6f__DZQGKMTI1LlFSw2X_m5fY&T=1ehh1jvjf/X=1364378469/E=954001251/R=mi/K=5/V=10.1/W=C/Y=YAHOO/F=1168823538/H=YmVzdC13b2VpZD0iMjI5NTQyMCIgY2Fycmllcj0iSU4tVU5LTk9XTiIgY29udGVudD0ibW9iaWxlX25ld3MiIGR2Y19jbHM9IjQiIHBuPSJ5YWhvb19tb2JpbGVfdXNfd2ViIiBycz0icHJpOnlhaG9vX21vYmlsZV91c193ZWI7c2VjOnlhaG9vO2NycjpJTi1VTktOT1dOOyIgc2VydmVJZD0iOTJqZlZUYzJMakZxcE9JNmZfX0RaUUdLTVRJMUxsRlN3MlhfbTVmWSIgc2l0ZUlkPSI0OTAyNTUxIiB0U3RtcD0iMTM2NDM3ODQ2OTk3MTg3MCIg/Q=-1/I=1/S=1/J=36F70D4C&U=12cle5obm/N=TWHUE2KJiVo-/C=-1/D=WFB2/B=-1/V=0 <!— SpaceID:954001251 —&gt;</body></html> 
<!— webgw51.mobile.sp1.yahoo.com uncompressed/chunked Wed Mar 27 10:01:09 GMT 2013 —&gt;
<!— fe621.global.media.sg3.yahoo.com uncompressed/chunked Wed Mar 27 10:01:09 UTC 2013 —&gt;
4

1 回答 1

1

出现此问题的原因是 QNetworkAccessManager 默认将标头设置User-AgentMozilla/5.0(使用 Qt 4.8.4 和 Qt 5.1.1 测试)。这会导致 yahoo 服务器返回一个 HTML 格式的版本,用于在浏览器中显示(在本例中为 firefox 和朋友)。

要强制执行 RSS,请将User-Agent标头设置为无法识别为浏览器的内容:

...
QNetworkRequest request(QUrl("http://news.yahoo.com/rss/sports"));
request.setRawHeader("User-Agent", "MyFancyApplication");
QNetworkReply *reply = network->get(request);
...
于 2013-10-23T20:07:05.900 回答