Qt4.6.1を使用してURLエンコードされたパラメータを使用してHTTP POSTリクエストを作成するにはどうすればよいですか?
QNetworkRequestを作成し、そこにすべてのパラメーターを設定して、QNetworkAccessManagerspostメソッドを介して送信できることがわかりました。しかし、URLエンコードされたパラメータをリクエストに追加するにはどうすればよいですか?
最後に、Qt/C++を使用して Eve API にアクセスしたいと思います。 A Python例はここにあります: http://www.eveonline.com/api/doc/example-python.asp
私はそれを次のようなものを使用して管理しました(まだリファクタリングされ、有用なものに形成されています):
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;
}
あなたの解決策はほぼ正しいです。ただし、次のものを使用する必要があります。
data = params.encodedQuery();
の代わりに
data.append(params.toString());
data.remove(0,1);
uTF8文字列を適切に処理するため。
あなたの投稿が遅くなってしまったことをお詫び申し上げます。ただし、他の誰かが答えを探している場合に備えて、私はまだ助けようとします。
偶然にも、私はEVE APIアプリケーションに取り組んでおり、同じ方法を試しました。残念ながら、QNetworkManager
はリクエストを非同期に送信するため、そのようには機能しません。スロットをそのfinished(QNetworkReply*)
信号に接続する必要があります。
これを行うには、EveConnector
という別のクラスでリクエストを行い、QNetworkManager
のfinished
シグナルに接続されたスロットで応答を処理してから、リクエストしているオブジェクトを呼び出します。コネクタクラス自体の信号。
よろしければ、コードを喜んで共有します。