2012-03-23 21 views
0

Qtでこのhttp://www.rcsb.org/pdb/software/rest.do RESTサービスを使用しようとしています。 私は何の問題もなくリクエストを出しましたが、XML Webサービスである高度な検索のポストリクエストをしようとすると応答がありません。Qt Webサービスの投稿のクエリ

これは私がしようとしているPOSTリクエストです:

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

}

誰もが私が間違っているのを知っていますか?してください...

答えて

1

あなたが与えたリンクは、クエリデータをXMLでエンコードする必要があると言います。

私は理由はわかりませんが、サービスではapplication/x-www-form-urlencodedContent-Typeとなり、他のすべてのタイプは 'rest.do'ページにredirectionと表示されます。

+0

0そうだね、私はそのページから高度な検索は、XML Webサービスであることを追加するのを忘れ、私はXML/SOAPサービス – userX731

+0

にPOSTリクエストを作成する方法はわかりません@ userX731私は自分の答えを編集しました。 – alexisdm

+0

ええ、ありがとうございました!、application-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を参照してください。投票 \t ダウン