无法通过 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(结果与我在浏览器中看到的不同)的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 PancakeSwap 路由器移除流动性。通过“写”合约成功添加,但无法删除LiquidityETH
为啥 charles 无法通过 c++ 捕获 http 请求?