我正在尝试将这个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());
}
任何人都知道我做错了什么?请...
答案 0 :(得分:1)
您提供的链接表示查询数据必须以XML格式编码。
我不知道为什么,但该服务似乎只允许application/x-www-form-urlencoded
为Content-Type
,所有其他类型触发redirection到'rest.do'页面。< / p>
答案 1 :(得分: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了解更多信息。