Qt Web Service帖子查询
Qt Web Service post query
我正在尝试使用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请求。你可以参考这个链接了解更多信息。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 查询SQLite数据库中的日期
- 如何在ArangoDb AQL查询中指定数据库
- Qt SQLite没有查询或参数计数不匹配
- 如何使用c++在VS 2019上运行SQL查询
- 从返回的顶点缓冲区查询顶点结构
- 以非特权用户身份查询 NTFS 特殊文件的元数据?
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 查询 NFS 上的提升进程间::file_lock
- Qt JSON – 从子项查询
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 无法从 Win10 中的 IDirectDraw7 查询 IDirect3D7
- 如何查询以确定我的 MacOS/X 应用程序是否处于应用程序午睡模式?
- 在子数组中查找多个查询的不同(唯一)值的数量
- DNS 查询格式标头结构中的小字节序问题
- QSql查询行受影响的结果
- C++库相关查询
- 优化使用 C++ 查询 SQLite DB 中超过 5000 万条数据记录的方式
- MongoDB 使用数组中的 OR 条件构建查询
- Qt Web Service帖子查询