Sto tentando di inviare una query JSON a un servizio Web e continuo a ricevere errori del server interno come risposta alla query.Formato corretto per HTTP POST utilizzando QNetworkRequest
Ecco quello che sto cercando di inviare:
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":"[email protected]","password":"mypass"}
Questo dovrebbe essere inviato a https://www.superService.com/api/1.7/ssapi.asmx
Nel preparare la QNetworkRequest, quale metodo viene utilizzato per inserire la linea
POST /api/1.7/webservice.asmx HTTP/1.1?
È l'intestazione completa contenuta nell'oggetto QNetworkRequest?
I dati JSON devono essere nell'oggetto QNetworkRequest o sono aggiunti al post come secondo argomento nel metodo QNetworkAccessManager :: post()?
Ecco il mio codice corrente nello slot 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("\"[email protected]\"");
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());
Grazie per la risposta rapida! La riga _italic_POST /api/1.7/webservice.asmx HTTP/1.1 _italic_ è ridondante, o come sarebbe inserita nella richiesta? – DarwinIcesurfer
È ridondante. */api/1.7/webservice.asmx * è specificato con 'serviceURL' e * POST * con il metodo' QNetworkAccessManager :: post(); '. ** Non è necessario scrivere la richiesta HTTP "di basso livello". Qt lo farà per te **. Non esitare a leggere alcuni tutorial su questo, penso che ti sarà molto utile. –
Anche la mia stringa json non era corretta. Avevo bisogno di passare "metodo", "parametri" e "id". Mi mancava l'oggetto "parameters" e l'oggetto "id". Un buon riassunto di json qui [link] (http://en.wikipedia.org/wiki/JSON-RPC#Version_1.0) – DarwinIcesurfer