无法通过 QNetworkAccessManager 获取 url(结果与我在浏览器中看到的不同)

Posted

技术标签:

【中文标题】无法通过 QNetworkAccessManager 获取 url(结果与我在浏览器中看到的不同)【英文标题】:Can't get url by QNetworkAccessManager (result differs what I see in my browser) 【发布时间】:2015-05-25 11:26:18 【问题描述】:

我的项目使用 QT 4.8.2。 我的问题是 QTNetworkAccess 无法正确获取我的网址(或对其进行解码)。 如果我将我的 url 粘贴到浏览器,我会看到浏览器中的结果与我在结果中看到的不同 (QNetworkreply)。

这是我需要获取的示例网址: * https://myhost/folder/folder/rss?cn1%5B0%5D=Web%2C+Mobile+%26+Software+Dev&cn2%5B0%5D=Web+Development

或者,没有 urlencode: ** https://myhost/folder/folder/rss?cn1[]=Web%2C+Mobile+%26+Software+Dev&cn2[]=Web+Development

我尝试将 QUrl 传递为 * 和 **。

这是我要获取的代码:

networkAccess = new QNetworkAccessManager();
connect (networkAccess, SIGNAL (finished(QNetworkReply*)), this, SLOT (h_networkAccess(QNetworkReply*)));

request = new QNetworkRequest(QUrl(settings->get()->rss_link));
request->setRawHeader("User-Agent",      "Mozilla/5.0 (Windows NT 5.1; rv:37.0) Gecko/20100101 Firefox/37.0");
request->setRawHeader("Accept",          "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request->setRawHeader("Accept-Encoding", "deflate");
request->setRawHeader("Connection",      "keep-alive");
if (settings->get()->cookie != "")
    request->setRawHeader("Cookie",      settings->get()->cookie.toAscii()); 

networkAccess->get(*request);

也许,我的问题是 url 中的“+”符号......但我不知道。 我可以提供我需要测试的完整链接。

请帮忙。

【问题讨论】:

无关评论:您正在泄漏请求对象。不需要在堆上创建,而是在栈上创建。 他 QNAM 返回了什么?出错了? QNAM 返回的数据没有错误,但我认为没有参数(即当我得到myhost/folder/folder/rss 时,我在浏览器中得到相同的结果)。 无泄漏,我使用时删除指针 【参考方案1】:

如果您的网址已经编码,请使用QUrl::fromEncoded 来自文档:

解析输入并返回相应的 QUrl。输入被假定为 采用编码形式,仅包含 ASCII 字符。

【讨论】:

qDebug() << QUrl(settings->get()->rss_link) 的输出是什么?您是否尝试使用 cURL 等其他工具来查看问题所在? 我需要抓取的网址是 upwork.com/jobs/… 。例如。如果通过 QNAM 获取它,我会看到忽略了哪些获取参数。 我使用 VS 2010,qDebug 不适合我。但是,如果我添加 QString aa = QUrl(settings->get()->rss_link).toString();在 aa 变量中,我看到与 rss_link 相同(rss ling 也是 QString),因此,转换为 QUrl 并返回是正确的。

以上是关于无法通过 QNetworkAccessManager 获取 url(结果与我在浏览器中看到的不同)的主要内容,如果未能解决你的问题,请参考以下文章

oracle 关于无法通过128 表无法扩展

无法通过 PancakeSwap 路由器移除流动性。通过“写”合约成功添加,但无法删除LiquidityETH

为啥 charles 无法通过 c++ 捕获 http 请求?

Xampp 无法创建数据库,也无法通过 Phpmyadmin 运行查询

无法通过单击按钮(仅通过手势)打开导航抽屉

无法通过 Mandrill 发送密件抄送电子邮件(通过 Laravel)