java HttpClient执行挂起,是否调用了API?

1rhkuytd  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(65)

我使用JAVA HttpClient登录到一个API
然后HttpClient在一个循环中执行并使用这个函数(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或我的程序?有没有一些工具来调查?

rqcrx0a6

rqcrx0a61#

挂起的是API,而不是应用程序。
尝试使用Postman或curl来检查API的响应时间。这可能是因为文件太大或网络连接太慢->尝试发送一个非常小的文件来检查。

相关问题