BaseX 9.5本地向远程服务器发HTTP请求读数据库无响应求助
BaseX 9.5 远程数据库查询(HTTP REST方式)
原代码问题分析
- 错误地将本地服务器的
collection('test')/*结果作为请求体发送,而非让远程服务器执行该查询 - 使用了BaseX REST根路径
/rest/,该路径用于数据库的创建、删除等管理操作,并非查询专用端点 - 请求体媒体类型设置为
application/xml,但发送XQuery查询时需指定application/xquery
正确实现方案
BaseX REST接口的/rest/query端点专门用于执行XQuery查询,需将待执行的查询语句作为请求体发送至该端点,修正后的代码如下:
let $server := 'http://10.102.xxx.xxx:8984/rest/query' let $sendreq := (http:send-request( <http:request method='POST' username='admin' password='admin' send-authorization='true' href='{$server}' auth-method='Basic'> <http:body media-type="application/xquery"> collection('test')/* </http:body> </http:request> ))[2] return $sendreq
关键修改说明
- 端点路径改为
/rest/query:匹配BaseX REST的查询执行规则 - 媒体类型改为
application/xquery:明确告知服务器请求体为XQuery语句 - 请求体直接写入查询语句:
collection('test')/*会在远程服务器上执行,返回远程test数据库的节点数据
调试建议
- 确认远程BaseX已启用REST服务:检查
basex.xml配置中RESTPort是否为8984,且服务正常启动 - 验证网络连通性:在本地用
curl或浏览器测试能否访问http://10.102.xxx.xxx:8984/rest/ - 检查权限:确保远程
admin账号密码正确,且拥有test数据库的访问权限 - 查看远程日志:BaseX日志目录(默认
basex/data/logs/)会记录请求细节,可排查错误原因
内容的提问来源于stack exchange,提问作者Dharmendra Kumar Singh
相关产品推荐
相关产品推荐

