2012-03-23 2 views
0

Я пытаюсь использовать этот сервис http://www.rcsb.org/pdb/software/rest.do REST с Qt. Я получил некоторые запросы без проблем, но когда я пытаюсь сделать запрос на отправку его расширенного поиска (который является веб-службой XML), я не получаю ответа.Qt Web Service post query

Это запрос на сообщение Пытаюсь:

<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! 
"" 

Edit:

Я также попытался это за запрос, но я до сих пор не получил никакого ответа:

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()); 

}

Любой знает, что я делаю неправильно? Пожалуйста ...

ответ

1

Ссылка, которую вы указали, указывает, что данные запроса должны быть закодированы в XML.

И я не знаю, почему, но сервис, кажется, только позволяют application/x-www-form-urlencoded, как Content-Type все другие типы вызвать redirection на страницу «rest.do».

+0

-вниз голос \t Вы правы, я забыл добавить, что расширенный поиск с этой страницы является веб-сервисом XML, но я понятия не имею, как сделать запрос POST к службе XML/SOAP – userX731

+0

@ userX731 Я отредактировал свой ответ. – alexisdm

+0

Да, вы правы, спасибо !, с приложением/x-www-form-urlencode как Content-Type, я получаю ответ. – userX731

0

Я не думаю, что вы отправляете данные в правильном направлении. Вы пытаетесь создать запрос по следующему коду, который не отправит запрос 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 за дополнительной информацией.