[英]How to get a file from a curl get request in Java?
我正在嘗試使用API下載一些XBRL文件。 為此,我需要執行curl請求,如下所示:
curl -XGET http://distribution.virk.dk/offentliggoerelser --data-binary @query_regnskaber.json
據我了解,這個想法是“ @ query_regnskaber.json”是我需要隨請求發送的一個json文件/ json查詢,作為回報,我得到了一個XBRL文件/一些數據。 我將Java與play框架一起使用(盡管不是專門針對curl請求使用play框架,但也許有人知道一些play功能可以執行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,我假設它用於查找特定的XBRL文件,這些文件可以在“ http://distribution.virk.dk/offentliggoerelser/_search ”上找到。 我希望能夠找到特定的XBRL文件。 以防萬一,這里是指向API文檔的鏈接。
我使用的示例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
}
后端似乎是ElasticSearch,並沒有太大變化,
像在ElasticSearch中一樣,禁止將查詢發送到http://distribution.virk.dk/offentliggoerelser
。 (您不能直接查詢索引)
但是,如果你要發送的工作POST
( GET
似乎太工作)查詢http://distribution.virk.dk/offentliggoerelser/_search
(NOTE /_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
它只是忽略了您要發送的查詢文件,從而吐出了一些與您的查詢不符的信息,這顯然是錯誤的。
(代表OP發布解決方案) 。
我在網站上添加了“ / _search”,並將請求方法更改為POST。 納法斯的回答中有解釋。
將doOutput
設置為TRUE會將其變為POST。 刪除以及發送的所有輸出。 請求參數應位於GET請求的URL中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.