QNetworkReply 不会在 HTML 注释中隐藏 JavaScript

Posted

技术标签:

【中文标题】QNetworkReply 不会在 HTML 注释中隐藏 JavaScript【英文标题】:QNetworkReply doesn't get JavaScript hidden in HTML Comment 【发布时间】:2013-10-20 06:26:08 【问题描述】:

我正在使用 Qt 4.8 发出 HTTP Post 请求。

void post() 
    QByteArray parameters;
    QUrl url("http://www.somerandomurl.com");

    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

    QNetworkReply* reply = network_access_manager->post(request, parameters);


void requestfinished(QNetworkReply* reply) 
    QString response(QString::fromUtf8(reply->readAll()));
    std::cout << response.toStdString() << std::endl;

我应该得到的 html 页面在 HTML 注释中隐藏了 javascript。如果我使用 Firefox/Chrome 查看它或使用 Python3 发出 HTTP 请求,我会以我想要的方式得到带有 Javascript 代码的评论。看起来像这样:

<script language="JavaScript">
<!--
Javascript Code
Javascript Code
Javascript Code
//-->
</script>

但是,对于 Qt 示例,我只能得到没有 Javascript 的评论。

<script language="JavaScript">
<!--
//-->
</script>

有没有办法通过 Qt 4.8 获取 Javascript?

【问题讨论】:

【参考方案1】:

在我看来,这似乎不太可能是由 Qt 过滤 JavaScript 引起的,但更有可能是服务器上的某些东西基于用户代理执行某些操作。在发送请求之前尝试致电request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36");

而且你的请求看起来有点奇怪。您正在使用 Content-type "application/x-www-form-urlencoded" 发布,但未提供任何数据。为什么不直接获取 URL?

另外,如果你可以分享 URL,调试起来会更容易。当然,如果不可能,那也没关系。

【讨论】:

以上是关于QNetworkReply 不会在 HTML 注释中隐藏 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 发出请求后QNetworkReply为空[重复]

QNetworkReply:在 QWebView 中禁用了网络访问

QNetworkReply 在发出完成信号时抛出 SIGSEGV

QNetworkReply 没有得到任何标题

QNetworkReply 未被删除

如何从 QWebPage 使用的 QNetworkReply 读取数据?