使用QNetworkRequest的HTTP POST的正确格式

我正在尝试将JSON查询发送到Web服务,并且继续收到内部服务器错误作为对该查询的响应。

这是我要发送的内容:

POST /api/1.7/webservice.asmx HTTP/1.1

Host: www.superService.com

User-Agent: My app name v0.1

X-Custom-User-Agent: My app name v0.1

Content-Type: application/json

Content-Length:81

{"method":"AuthenticatePlain","loginName":"username@domain.com","password":"mypass"}

这应该发送到

https://www.superService.com/api/1.7/ssapi.asmx

在准备时QNetworkRequest,使用什么方法插入行

QNetworkRequest对象中是否包含完整的标头?

JSON数据应该在QNetworkRequest对象中还是作为方法中的第二个参数添加到帖子中QNetworkAccessManager::post()

这是我当前在on_btnLogin_clicked()插槽中的代码:

connect(m_qnam, SIGNAL(finished(QNetworkReply*)),

this, SLOT(handleNetworkData(QNetworkReply*)));

connect(m_qnam,SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),

this, SLOT(handleSSLErrors(QNetworkReply*)));

QString baseString = "";

baseString.append(QString("POST /api/1.7/webservice.asmx HTTP/1.1\r\n").toUtf8());

baseString.append(QString("www.superService.com\r\n").toUtf8());

baseString.append(QString("User-Agent: My app name v0.1\r\n").toUtf8());

baseString.append(QString("X-Custom-User-Agent: My app name v0.1\r\n").toUtf8());

baseString.append(QString("Content-Type: application/json\r\n").toUtf8());

QString jsonString = QString("{");

jsonString.append("\"method\":");

jsonString.append("\"AuthenticatePlain\"");

jsonString.append(",\"loginName\":");

jsonString.append("\"username@domain.com\"");

jsonString.append(",\"password\":");

jsonString.append("\"mypass\"");

jsonString.append("}");

QByteArray json = jsonString.toUtf8();

baseString.append(QString("Content-Length:").toUtf8());

baseString.append(QString::number(json.length()));

baseString.append("\r\n").toUtf8();

baseString.append(QString("\r\n").toUtf8());

baseString.append(json);

request = QNetworkRequest(QUrl("https://www.superService.com/api/1.7/ssapi.asmx"));

request.setRawHeader()

qDebug() << "Base String: "<< baseString;

m_qnam->post(request,baseString.toUtf8());

回答:

这不是编写HTTP请求的正确方法。以下代码更正确:

connect(m_qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleNetworkData(QNetworkReply*)));

connect(m_qnam,SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(handleSSLErrors(QNetworkReply*)));

// Build your JSON string as usual

QByteArray jsonString = "{\"method\":\"AuthenticatePlain\",\"loginName\":\"username@domain.com\",\"password\":\"mypass\"}";

// For your "Content-Length" header

QByteArray postDataSize = QByteArray::number(jsonString.size());

// Time for building your request

QUrl serviceURL("https://www.superService.com/api/1.7/ssapi.asmx");

QNetworkRequest request(serviceURL);

// Add the headers specifying their names and their values with the following method : void QNetworkRequest::setRawHeader(const QByteArray & headerName, const QByteArray & headerValue);

request.setRawHeader("User-Agent", "My app name v0.1");

request.setRawHeader("X-Custom-User-Agent", "My app name v0.1");

request.setRawHeader("Content-Type", "application/json");

request.setRawHeader("Content-Length", postDataSize);

// Use QNetworkReply * QNetworkAccessManager::post(const QNetworkRequest & request, const QByteArray & data); to send your request. Qt will rearrange everything correctly.

QNetworkReply * reply = m_qnam->post(request, jsonString);

以上是 使用QNetworkRequest的HTTP POST的正确格式 的全部内容, 来源链接: utcz.com/qa/435523.html

回到顶部