代码之家  ›  专栏  ›  技术社区  ›  Tobias Langner

如何使用Qt 4.6.1创建HTTP POST请求?

  •  30
  • Tobias Langner  · 技术社区  · 16 年前

    如何使用Qt 4.6.1创建带有URL编码参数的HTTP POST请求?

    我发现我可以创建一个QNetworkRequest,在那里设置所有参数,然后通过QNetworkAccessManagers post方法发送它。但是,如何向请求添加一些URL编码的参数?

    最后我想访问 Eve API 使用Qt/C++。下面是一个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;
    }
    
    2 回复  |  直到 16 年前
        1
  •  11
  •   stach    15 年前

    你的解决方案几乎是正确的。但我们应该使用:

    data = params.encodedQuery();
    

    而不是

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

    正确处理UTF8字符串。

        2
  •  6
  •   Venemo    16 年前

    很抱歉,我这么晚才发现你的帖子。 不过,我还是会尽力帮忙,以防有人在寻找答案。

    意外的是,我也在开发一个EVE API应用程序,我也尝试了同样的方法。不幸的是, QNetworkManager 不是这样的,因为它异步发送请求。你必须把一个插槽连接到它的 finished(QNetworkReply*) 信号。

    我用一个名为 EveConnector ,处理连接到 QNetworkManager公司 finished 发出信号,然后通过连接器类自己的信号回调请求对象。

    如果你问的话,我很乐意分享密码。