{"record":{"id":"669d4ffb955f1a89","repo":"pentaho/pentaho-kettle","slug":"http-log-unablegetresult","errorCode":"HTTP.Log.UnableGetResult","errorMessage":"HTTP.Log.UnableGetResult","messagePattern":"HTTP\\.Log\\.UnableGetResult","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/http/HTTP.java","lineNumber":240,"sourceCode":"          newRow = RowDataUtil.addValueData( newRow, returnFieldsOffset, new Long( responseTime ) );\n          returnFieldsOffset++;\n        }\n        if ( !Utils.isEmpty( meta.getResponseHeaderFieldName() ) ) {\n          newRow = RowDataUtil.addValueData( newRow, returnFieldsOffset, headerString );\n        }\n\n      } finally {\n        if ( httpResponse != null ) {\n          httpResponse.close();\n        }\n        // Release current connection to the connection pool once you are done\n        method.releaseConnection();\n      }\n      return newRow;\n    } catch ( UnknownHostException uhe ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"HTTP.Error.UnknownHostException\", uhe.getMessage() ) );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"HTTP.Log.UnableGetResult\", uri ), e );\n    }\n  }\n\n  private URIBuilder constructUrlBuilder( RowMetaInterface outputRowMeta, Object[] row ) throws KettleValueException,\n    KettleException {\n    URIBuilder uriBuilder;\n    try {\n      String baseUrl = data.realUrl;\n      if ( meta.isUrlInField() ) {\n        // get dynamic url\n        baseUrl = outputRowMeta.getString( row, data.indexOfUrlField );\n      }\n\n      if ( isDetailed() ) {\n        logDetailed( BaseMessages.getString( PKG, \"HTTP.Log.Connecting\", baseUrl ) );\n      }\n\n      uriBuilder = new URIBuilder( baseUrl ); // the base URL with variable substitution","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/http/HTTP.java#L222-L258","documentation":"KettleStep/HTTP step wraps any unexpected failure while executing the HTTP request in callHttpService into a KettleException with message 'HTTP.Log.UnableGetResult'. It is the generic catch-all after the request was built and sent; the original cause (connect failure, protocol error, response parsing failure) is attached as the cause. UnknownHostException is handled separately before this branch.","triggerScenarios":"callHttpService throws any Exception other than UnknownHostException while opening/executing the HttpClient call against the row's URL (connection refused, connect timeout, SSL handshake failure, URI with illegal characters reaching execute, response stream read failure).","commonSituations":"Target host unreachable or port closed; HTTPS endpoint with untrusted/self-signed certificate; URL containing spaces or unencoded characters after variable substitution; proxy/firewall blocking the request; remote server resetting the connection mid-response.","solutions":["Inspect the chained cause exception in the Kettle log to get the real root cause (connect/SSL/timeout).","Verify the URL is reachable: curl the exact substituted URL from the same host running Pentaho.","Check network path: proxy settings (in kettle.properties or -Dhttp.proxyHost), firewall, DNS resolution.","If SSL-related, import the server certificate into the JVM truststore or configure an SSL trust manager.","Encode/validate the URL in constructUrlBuilder (URIBuilder) so substituted values produce a valid URI."],"exampleFix":"// before\nString url = \"${BASE_URL}/api\"; // substituted value contains a space\n// after\nString url = environmentSubstitute( \"${BASE_URL}\" ) + \"/api\";\n// or in code: URIBuilder encodes params via addParameter, not manual string concat","handlingStrategy":"try-catch","validationCode":"// validate the substituted URL is well-formed and resolvable before running the transformation\nURI u = new URI( environmentSubstitute( urlSetting ) );\nif ( u.getScheme() == null || (!u.getScheme().equals(\"http\") && !u.getScheme().equals(\"https\")) ) throw new IllegalArgumentException( \"invalid URL: \" + u );","typeGuard":null,"tryCatchPattern":"try { newRow = callHttpService( ... ); } catch ( KettleException e ) {\n  Throwable root = e; while ( root.getCause() != null ) root = root.getCause();\n  logError( \"HTTP call failed: \" + root.getMessage(), e );\n  // route row to error stream or retry with backoff\n}","preventionTips":["Always check the chained cause to identify connect vs SSL vs timeout failures","Validate substituted URLs at design time with a preview/test row","Configure proxy and truststore settings explicitly in kettle.properties","Set reasonable connect/socket timeouts in the step so failures surface fast"],"tags":["http","network","kettle","request-failed"],"backgroundTag":"http-request-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}