【问题标题】:Qt Web Service post queryQt Web Service 发布查询
【发布时间】:2019-11-07 12:01:31
【问题描述】:

我正在尝试将此http://www.rcsb.org/pdb/software/rest.do REST 服务与 Qt 一起使用。 我做了一些没有问题的获取请求,但是当我尝试对其高级搜索(这是一个 XML Web 服务)进行发布请求时,我没有得到任何响应。

这是我正在尝试的发布请求:

<orgPdbQuery>

<queryType>org.pdb.query.simple.StructureIdQuery</queryType>

<description>Simple query for a list of PDB IDs (1 IDs) : 3I5F</description>

<structureIdList>3I5F</structureIdList>

</orgPdbQuery>

这是我的请求代码:

void WindowWrapper::postRequest()
{
    QNetworkRequest request;

    QUrl res = QUrl(request_url_);

    QUrl query;
    query.addQueryItem("queryType","org.pdb.query.simple.StructureIdQuery");
    query.addQueryItem("structureIdList","3I5F");

    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");
    request.setUrl(res);

    QObject::connect(network_, SIGNAL(finished(QNetworkReply*)),
                     this, SLOT(slotRequestFinished(QNetworkReply*)));

    network_->post(request, query.encodedQuery());
}


void WindowWrapper::slotRequestFinished(QNetworkReply* reply)
{
    if(reply->error() > 0)
    {
        qDebug() << reply->errorString();
    }
    else
    {
        QByteArray data = reply->readAll();            

        qDebug() << "Request successful!";
        qDebug() << data;             
    }
}

以及方法调用:

    wrapper_->set_request_url("http://www.rcsb.org/pdb/rest/search/");
    wrapper_->postRequest();

在我的调试输出中,我得到了这个:

Request successful! 
"" 

编辑:

我也尝试过这个请求,但我仍然没有得到回应:

void WindowWrapper::postRequest()
{
    QNetworkRequest request;

    request.setRawHeader("Content-Type", "text/xml;charset=UTF-8");
    request.setUrl(QUrl(request_url_));

    QString query =
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
        "<orgPdbQuery>"
        "<queryType>org.pdb.query.simple.StructureIdQuery</queryType>"
        "<description>Simple query for a list of PDB IDs (1 IDs) : 3I5F</description>"
        "<structureIdList>3I5F</structureIdList>"
        "</orgPdbQuery>";

    QObject::connect(network_, SIGNAL(finished(QNetworkReply*)),
                 this, SLOT(slotRequestFinished(QNetworkReply*)));

    network_->post(request, query.toUtf8());

}

有人知道我做错了什么吗?请...

【问题讨论】:

    标签: c++ web-services qt


    【解决方案1】:

    您提供的链接说查询数据必须以 XML 编码。

    我不知道为什么,但该服务似乎只允许application/x-www-form-urlencoded 作为Content-Type,所有其他类型都会触发redirection 到“rest.do”页面。

    【讨论】:

    • 0 否决票你说得对,我忘了补充说,该页面的高级搜索是 XML Web 服务,但我不知道如何向 XML/SOAP 服务发出 POST 请求
    • 是的,你是对的,谢谢!,使用 application/x-www-form-urlencode 作为 Content-Type 我得到了回应。
    【解决方案2】:

    我认为您发送数据的方式不正确。您正在尝试通过以下代码创建请求,该代码不会将 xml 请求发送到服务器。

    QUrl query;
        query.addQueryItem("queryType","org.pdb.query.simple.StructureIdQuery");
        query.addQueryItem("structureIdList","3I5F");
    

    您需要执行以下操作才能将 xml 数据发送到服务器。

    QNetworkRequest request(QUrl("https://graph.facebook.com/me/feed");
    mCurrentRequest  = mNetManager.post(request,postData.toAscii());
    connect(mCurrentRequest,SIGNAL(finished()),this,SLOT(messageResponse()));
    

    在上面的代码中 postData 应该是您的 xml 请求。您可以参考this link 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多