【发布时间】:2014-07-17 09:34:45
【问题描述】:
我有下一个发出请求的代码:
void HTTPClient::post(QString connectionString, QHttpMultiPart* _multiPart, bool returnProgress) {
QUrl url;
if (ssl)
url.setScheme("https");
else
url.setScheme("http");
url.setHost(host);
url.setPort(port);
url.setPath(connectionString);
url.setUrl(url.toEncoded());
QNetworkRequest request(url);
request.setRawHeader("User-Agent", QCoreApplication::applicationName().toLatin1());
/*...irrelevant code...*/
}
请求的网址应该是
https://somewebpage.domain:443/REST/login.php?method=login_md5
但是 QNetworkRequest 请求这个,尽管我将 url 设置为编码(调试 url.toEncoded() 正确打印'?'):
https://somewebpage.domain:443/REST/login.php%3Fmethod=login_md5
这会导致 404 未找到页面。我试过用 url.toString() 设置 url,只是 url,但是 '?'一直在搞砸。我该怎么做才能正确请求链接?
我尝试在构造函数中构建 QUrl,如下所示:
QUrl url("https://"+host+port+connectionString);
但结果是下一个字符串:
https://somewebpage.xn--domain-efa/REST/login.php?method=login_md5
【问题讨论】:
-
但是这个网页不可用
-
好吧,我需要保密,网页不是 somewebpage.domain,它类似于 google.com,我已经尝试了 url,它确实有效
-
试试 req.setRawHeader("POST",url.path().toAscii())
-
QByteArray rawQuery("method=login_md5"); QUrl url("somewebpage.domain:443/REST/login.php"); url.setEncodedQuery(rawQuery); std::cout somewebpage.domain:443/REST/login.php?method=login_md5
-
最后一个选项 QUrl(QString::fromUtf8(QByteArray));或 QUrl url = QUrl::fromEncoded(str.toAscii());
标签: c++ qt encoding qnetworkrequest