在 QNetworkRequest 中设置标头时遇到问题
Posted
技术标签:
【中文标题】在 QNetworkRequest 中设置标头时遇到问题【英文标题】:Having trouble setting headers in a QNetworkRequest 【发布时间】:2011-02-20 15:41:42 【问题描述】:我正在使用以下函数进行发布请求:
bool NewAccountDialog::verifyAccount()
QString loginURL = "https://accounts.craigslist.org/";
QString USERAGENT = "Mozilla/Firefox 3.6.12";
// This is all bullshit
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(loginURL);
request.setRawHeader("User-Agent", USERAGENT);
QByteArray data;
QUrl params;
params.addQueryItem("inputEmailHandle", accountName->text());
params.addQueryItem("inputPassword", accountPass->text());
data.append(params.toString());
//No idea what this does
data.remove(0,1);
QNetworkReply *reply = manager->post(request,data);
// Parse reply
return 1;
显然它不完整,但它没有编译给我一个错误,我运行 request.setRawHeader()
抱怨没有与我的调用匹配的函数:
/home/brett/projects/CLPoster/CLPoster-build-desktop/../CLPoster/newaccountdialog.cpp:120: 错误:没有匹配的调用函数
QNetworkRequest::setRawHeader(const char [11], QString&)
它需要2个QByteArrays
作为参数,官方的例子甚至传了两个字符串:
request.setRawHeader("Last-Modified", "Sun, 06 Nov 1994 08:49:37 GMT");
这并不重要,但我已经尝试过了,但仍然遇到同样的错误。我的 Qt 坏了吗?
【问题讨论】:
【参考方案1】:问题出在第二个参数(USERAGENT
)。 QByteArray
可以从 char 数组构造,但不能从 QString
构造(参见 QByteArray
's documentation)。您需要使用QString::toAscii()
、QString::toLatin1()
或类似的东西,或者将USERAGENT
设为char*
:
const char* USERAGENT = "Mozilla/Firefox 3.6.12";
【讨论】:
以上是关于在 QNetworkRequest 中设置标头时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章