Qt Web Service帖子查询

Qt Web Service post query

本文关键字:查询 Service Web Qt      更新时间:2023-10-16

我正在尝试使用http://www.rcsb.org/pdb/software/rest.do带有Qt的REST服务。我确实收到了一些请求,但当我尝试向其高级搜索(即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());

}

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

您提供的链接表明查询数据必须用XML编码。

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

我认为您发送数据的方式不对。您正试图通过以下代码创建请求,这些代码不会将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请求。你可以参考这个链接了解更多信息。