verbo tipo textual puede por net example este enviar create contenido con web-services qt post symbian

web services - tipo - ¿Cómo puedo enviar datos a una url usando QNetworkAccessManager?



webrequest create (6)

Actualizando la respuesta alexisdm a Qt5:

// Setup the webservice url QUrl serviceUrl = QUrl("http://your.url"); QByteArray postData; QUrl params; QUrlQuery query; query.addQueryItem("param1","string1"); query.addQueryItem("param2","string2"); params.setQuery(query); postData = params.toEncoded(QUrl::RemoveFragment); // Call the webservice QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); connect(networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(onPostAnswer(QNetworkReply*))); QNetworkRequest networkRequest(serviceUrl); networkRequest.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded"); networkManager->post(networkRequest,postData);

No te olvides de incluir

QT += network

en .pro.

Tengo un servicio web que necesito enviar algunos datos para usar Qt. Pensé que puedo usar un QByteArray cuando realice la POST en el servicio web.

Mi pregunta es, ¿cómo puedo formatear esta matriz para analizarla correctamente en el otro extremo?

Este es el código que tengo hasta ahora:

// Setup the webservice url QUrl serviceUrl = QUrl("http://myserver/myservice.asmx"); QByteArray postData; /* Setup the post data somehow I want to transmit: param1=string, param2=string */ // Call the webservice QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*))); networkManager->post(QNetworkRequest(serviceUrl), postData);

¡Gracias!


Aquí hay otra forma de manejar esto, estoy usando tu código también para dar un código completo:

// Setup the webservice url QUrl serviceUrl = QUrl("http://myserver/myservice.asmx"); QByteArray postData; QUrl params; params.addQueryItem("param1","string1"); params.addQueryItem("param2","string2"); postData = params.encodedQuery(); // Call the webservice QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*))); networkManager->post(QNetworkRequest(serviceUrl), postData);


Dado que algunos parámetros y valores pueden necesitar ser utf-8 y por ciento codificados (espacios, &, =, caracteres especiales ...), debería utilizar QUrl (para Qt 4) o QUrlQuery (para Qt 5) para compilar los QUrlQuery publicados. cuerda.

Código de ejemplo para Qt 4 :

QUrl postData; postData.addQueryItem("param1", "string"); postData.addQueryItem("param2", "string"); ... QNetworkRequest request(serviceUrl); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); networkManager->post(request, postData.encodedQuery());

y para Qt 5 :

QUrlQuery postData; postData.addQueryItem("param1", "string"); postData.addQueryItem("param2", "string"); ... QNetworkRequest request(serviceUrl); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); networkManager->post(request, postData.toString(QUrl::FullyEncoded).toUtf8());

A partir de Qt 4.8 también puede usar QHttpMultiPart si necesita cargar archivos.


Solía:

QByteArray postData; postData.append("param1=string&"); postData.append("param2=string");

Por lo tanto, en lugar de nueva línea después de cada parámetro.


la respuesta en realidad es

QByteArray postData; postData.append("param1=string&"); postData.append("param2=string");

NOTA: use "&" aquí! .

No noté la respuesta de Juha aquí, y perdí mucho tiempo probando mi código usando el enfoque ", / n".

Por favor, cambia la respuesta correcta a la de Juha.


QByteArray postData; postData.append("param1=string,/n"); postData.append("param2=string/n");