我正在尝试使用API下载一些XBRL文件。为了做到这一点,我需要做一个卷曲请求,如下所示:
curl -XGET http://distribution.virk.dk/offentliggoerelser --data-binary @query_regnskaber.json
根据我的理解,这个想法是“@ query_regnskaber.json”是我需要随请求发送的json文件/ json查询,作为回报,我得到一个XBRL文件/一些数据。我正在使用Java与播放框架(虽然没有专门使用播放框架的curl请求,但也许有人知道一些播放功能来执行curl请求)。
这是我目前的代码:
String jsonStr =
"{" +
"\"query\": {" +
"\"bool\": {" +
"\"must\": [" +
"{" +
"\"term\": {" +
"\"offentliggoerelse.dokumenter.dokumentMimeType\": \"application\"" +
"}" +
"}," +
"{" +
"\"term\": {" +
"\"offentliggoerelse.dokumenter.dokumentMimeType\": \"xml\"" +
"}" +
"}," +
"{" +
"\"range\": {" +
"\"offentliggoerelse.offentliggoerelsesTidspunkt\": {" +
"\"from\": \"2016-12-01\"" +
"}" +
"}" +
"}" +
"]," +
"\"must_not\": []," +
"\"should\": []" +
"}" +
"}," +
"\"size\": 1000" +
"}";
String urlStr = "http://distribution.virk.dk/offentliggoerelser";
JSONObject jsonObj = new JSONObject(jsonStr);
URL myURL = new URL(urlStr);
HttpURLConnection urlCon = (HttpURLConnection)myURL.openConnection();
urlCon.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
urlCon.setRequestMethod("GET");
urlCon.setDoInput(true);
urlCon.setDoOutput(true);
urlCon.connect();
OutputStream os = urlCon.getOutputStream();
os.write(jsonObj.toString().getBytes("UTF-8"));
os.close();
BufferedReader br = new BufferedReader(new InputStreamReader((urlCon.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
urlCon.disconnect();
出现问题,我不确定是否因为某些设置,我的代码或两者都丢失了。我在“urlCon.getInputStream()”调用中得到403错误。
我能为API找到的唯一文档是丹麦语。它还提到它使用ElasticSearch,我假设它用于查找可在“http://distribution.virk.dk/offentliggoerelser/_search”上找到的特定XBRL文件。我希望能够找到特定的XBRL文件。以防万一,此处是指向API documentation的链接。
我正在使用示例json查询,该查询可以在我的代码中的文档中找到。
感谢您的帮助。
我的json测试查询:
{
"query": {
"bool": {
"must": [
{
"term": {
"offentliggoerelse.dokumenter.dokumentMimeType": "application"
}
},
{
"term": {
"offentliggoerelse.dokumenter.dokumentMimeType": "xml"
}
},
{
"range": {
"offentliggoerelse.offentliggoerelsesTidspunkt": {
"from": "2014-10-01"
}
}
}
],
"must_not": [],
"should": []
}
},
"size": 1000
}
答案 0 :(得分:0)
它似乎是后端的ElasticSearch并没有太大变化,
将查询发送到http://distribution.virk.dk/offentliggoerelser
是禁止的,就像在ElasticSearch中一样。 (你不能直接查询索引)
但如果您向POST
发送GET
(http://distribution.virk.dk/offentliggoerelser/_search
似乎也有效)查询,则应该有效(注意/_search
)
所以改变
String urlStr = "http://distribution.virk.dk/offentliggoerelser";
到
String urlStr = "http://distribution.virk.dk/offentliggoerelser/_search";
(可选)更改
urlCon.setRequestMethod("GET");
到
urlCon.setRequestMethod("POST");
注意:强>
如果您想知道CURL
为什么有效,
好吧,它没有,因为你使用XGET
而不是XPOST
它只是忽略你发送的查询文件,因此吐出一些与你的查询不对应的信息
这显然是错误的。
答案 1 :(得分:0)
(代表OP发布解决方案)。
我在网站上添加了“/ _search”,并将请求方法更改为POST。在nafas的回答中解释。
答案 2 :(得分:0)
将doOutput
设置为TRUE会将其变为POST。删除,以及您发送的任何输出。请求参数应该在GET请求的URL中。