HttpClient выполняется, но зависает, API вызывается? - PullRequest
0 голосов
/ 12 февраля 2020

Я использовал JAVA HttpClient для входа в API

Затем HttpClient выполняется в al oop и использует эту функцию (checkZipFile), после первого раза он зависает на "client.execute (post ) ".

private String checkZipFile(HttpClient client, File zipFile){
        String errCode = "";
        try {
            HttpPost post = new HttpPost(URL_API);

            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.addTextBody("command", "ImportCustomMaster");
            builder.addTextBody("type", "csvZip");
            builder.addBinaryBody(
              "dataFile", zipFile);
            builder.addTextBody("encoding", "932");

            HttpEntity multipart = builder.build();

            post.setEntity(multipart);
            HttpResponse response = client.execute(post); //<-- IT HANGS HERE
            System.out.println("\nSending 'POST' request to URL : " + URL_API);
            System.out.println("Post parameters : " + "dataFile: " + zipFile.getName());
            System.out.println("Response Code : " + response.getStatusLine().getStatusCode());

            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
            try {
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(new InputSource(new StringReader(result.toString())));
                doc.getDocumentElement().normalize();

                Node nNode = doc.getElementsByTagName("error").item(0);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    errCode = eElement.getElementsByTagName("code").item(0).getTextContent();
                    System.out.println("Error Code : " + errCode);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }


        }catch (ConnectException e) {
            System.out.println(e.getMessage());
            return "";
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        return errCode;
    }

Я точно не знаю причину, почему, но, по крайней мере, вызывается API, а затем он зависает из-за API или моей программы? Есть ли инструменты для расследования этого?

1 Ответ

1 голос
/ 12 февраля 2020

API зависает, а не ваше приложение.

Попробуйте использовать Почтальон или curl, чтобы проверить время отклика API. Это может быть из-за большого размера файла или медленного соединения inte rnet -> попробуйте отправить очень маленький файл, просто чтобы проверить это.

...