para medida license gratis descargar creator c++ http qt4

c++ - medida - ¿Cómo puedo crear una solicitud HTTP POST con Qt 4.6.1?



qt license (2)

¿Cómo puedo crear una solicitud HTTP POST con algunos parámetros codificados de URL usando Qt 4.6.1?

Me di cuenta de que puedo crear una QNetworkRequest, establecer todos los parámetros allí y enviarlo a través del método de publicación de QNetworkAccessManagers. Pero, ¿cómo puedo agregar algunos parámetros codificados en URL a la solicitud?

Al final quiero acceder a la API de Eve utilizando Qt / C ++. Un ejemplo de Python se puede encontrar aquí: http://www.eveonline.com/api/doc/example-python.asp

Lo logré utilizando algo así como (aún para ser refactorizado y formado en algo útil):

QNetworkReply *requestApi(QNetworkAccessManager &nwam) { QNetworkRequest request(QUrl("http://api.eve-online.com/account/Characters.xml.aspx")); request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded"); QByteArray data; QUrl params; params.addQueryItem("userid","user"); params.addQueryItem("apiKey","key"); data.append(params.toString()); data.remove(0,1); QNetworkReply *reply = nwam.post(request,data); return reply; }


Lamento haber encontrado tu publicación tan tarde. Sin embargo, aún intentaré ayudar, en caso de que alguien más esté buscando la respuesta.

Por accidente, también estoy trabajando en una aplicación EVE API, y también lo intenté de la misma manera. Desafortunadamente, QNetworkManager no funciona de esa manera, ya que publica la solicitud de forma asíncrona. finished(QNetworkReply*) conectar una ranura a su señal finished(QNetworkReply*) .

Lo hago haciendo una solicitud con una clase separada llamada EveConnector , procesando la respuesta en la ranura conectada a la señal finished QNetworkManager , y luego devolviendo la llamada al objeto solicitante a través de las propias señales de la clase del conector.

Felizmente compartiría el código, si lo pides.


Tu solución es casi correcta. Pero uno debe usar:

data = params.encodedQuery();

en lugar de

data.append(params.toString()); data.remove(0,1);

para manejar cadenas UTF8 correctamente.