簡體   English   中英

如何從Java中的curl get請求獲取文件?

[英]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 (您不能直接查詢索引)

但是,如果你要發送的工作POSTGET似乎太工作)查詢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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM