HttpRequest с использованием WorkFusion Groovy - PullRequest
0 голосов
/ 24 марта 2020

Я пишу свой собственный groovy сценарий в WorkFusion ide, и мне нужно отправить multipart/form-data в бэкэнд, но я не могу использовать внешние библиотеки для этого, поскольку вы не можете импортировать их в WorkFusion.

Это то, что я придумал до сих пор, но я застрял в каждом TODO:

                // Mapping the variables
                @CustomScriptAction(
                    input = ['bearer_token', 'organisation_id', 'project_id', 'files'],
                    output = 'json'
                )

                // Sending the files
                def customScript() {
                    def url = "https://x.y.com/gql/api/organisations/" + organisation_id + "/projectId/" + project_id + "/process"
                        try {
                            def postConnection = new URL(url)
                            HttpURLConnection http = (HttpURLConnection) postConnection.openConnection()
                            http.setRequestProperty("Authorization", "Bearer " + bearer_token)
                            http.setRequestProperty("Content-Type", "multipart/form-data")
                            http.setDoOutput(true)
                            http.setRequestMethod('POST')
                            // TODO: create multipart and send as content
                            def multipart
                            files.each {
                                ContentHandler
                                def content = new FileInputStream(new File(it))
                                def name = getName(it)
                                content.setRequestProperty(getContentType(name))
                                multipart.addBinaryBody("files", content , name)
                            }
                            // TODO: write away the multipartContent
                            http.getOutputStream().write(multipart)
                            def responseCode = http.getResponseCode()
                            def response
                            if(responseCode >= 200 && responseCode < 300) {
                                response = http.getInputStream().getText()
                            }
                            // TODO: parse uploadId from response
                            def upload_id
                            def polling = true
                            def counter = 1
                            def get = new URL(url + "/" + upload_id).openConnection()
                            def getResponse
                            do {
                                // TODO: parse get response
                                getResponse = get.getInputStream().getText()
                                switch(getResponse) {
                                    case "DONE":
                                        polling = false;
                                        break
                                    case "DOCUMENT_CLASSIFICATION_INTERVENTION":
                                    case "ENTITY_EXTRACTION_INTERVENTION":
                                        throw new Exception("Intervention needed")
                                    case "FAILED":
                                        throw new Exception("Something went wrong during the processing process")
                                    default:
                                        counter++
                                        break
                                }
                                // Sleep for 7 seconds before resending the request.
                                Thread.sleep(7000)
                            } while(polling && counter <= 150)
                            // TODO: parse and format json (getResponse)
                        } catch(all) {
                            throw new Exception(all.getMessage())
                        }
                }

                def getContentType(String name){
                    def splitName = name.split(".")
                    def extension = splitName[1]
                    switch (extension) {
                        case "pdf":
                            return "application/pdf";
                        case "png":
                            return "image/png";
                        case "doc":
                            return "application/msword";
                        case "docx":
                            return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
                        case "txt":
                            return "text/plain";
                        case "tif":
                            return "image/tif";
                        case "jpg":
                            return "image/jpg";
                        case "rtf":
                            return "application/rtf";
                        // default == not supported type, we don't set content type
                        default:
                            return "";
                    }
                }
                def getName(String path) {
                    // Java equivalent of \\
                    def splitPath = path.split("\\\\")
                    return splitPath[splitPath.length - 1]
                }

, например, как я могу использовать MultiPartEntityBuilder или как его эквивалент. Для разбора ответов (json) мне нужно создавать классы, соответствующие этим объектам, или я могу работать с json так же, как я бы в javascript?

Любая помощь очень ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...