【问题标题】:CURL in JAVA - Could not resolve host : POSTJAVA 中的 CURL - 无法解析主机:POST
【发布时间】:2015-05-21 11:10:23
【问题描述】:

通过安装适用于 Windows 的 curl,我已经成功地能够从我的 Windows PC 中的 CMD 执行 CURL 命令。同样,通过使用 ProcessBuilder 和 Process 创建操作系统进程,我已经能够让它们在我的 JAVA 应用程序中工作。特别是,我需要执行此处给出的 KissFlow 中使用的 REST API 端点命令:https://support.kissflow.com/support/solutions/articles/179582-understanding-the-rest-api-end-points

问题:我已经能够像这样使用 GET 方法执行命令。 ProcessBuilder pb = new ProcessBuilder("curl","-H","api_key:<XXXX>","-X","GET","http://<XXXX>.appspot.com/api/1/Employee/list/p1/50

但是,当使用带有 POST 的命令时,例如 ProcessBuilder pb = new ProcessBuilder("curl","-H","api_key:<XXXX>","-X ","POST","--data-urlencode","First Name=XXXX","http://<XXXX>.appspot.com/api/1/Employee/submit");,我收到一个错误: curl: (6) 无法解析主机:POST 随着进程的输入流返回 <html><title>Error 400 (Bad Request)!!1</title></html>

实际上,当从 CMD 执行时,这可以完美运行。

我在这里尝试了所有相关问题的建议。任何帮助表示赞赏。谢谢。

编辑:任何来自 CURL 的替代方法来做同样的事情也是可以接受的。

【问题讨论】:

  • 旁注:尽可能避免在 Java 中生成外部工具。 Commons::HttpClient 可以用纯 Java 做!
  • 正如@GyroGearless 所说,使用HttpRequest 而不是curl。在 java 中使用 curl 真的很不愉快 ;-)
  • 我还没有完全尝试过 HttpClient。您能否发布正确的方法来使用上述命令?

标签: java post curl httpclient processbuilder


【解决方案1】:

根据@GyroGearless 的想法,尝试使用下面的示例代码,通过使用Apache 的HttpClient 类的GET 和POST 方法从URL 中检索响应。我认为使用 HttpClient 你将拥有比使用 CURL 更多的“力量”。

您需要 commons-httpclient.jar 及其依赖项:commons-codeccommons-logging。你可以在http://commons.apache.org/downloads/找到这些罐子

(...)
String url = "http://<XXXX>.appspot.com/api/1/Employee/list/p1/50";
HttpClient client = new HttpClient();
GetMethod get = new GetMethod(url);
client.executeMethod(get);
System.out.println(new String(get.getResponseBody()));
get.releaseConnection();

url = "http://<XXXX>.appspot.com/api/1/Employee/submit";
PostMethod post = new PostMethod(url);
post.addParameter("id", "10");
client.executeMethod(post);
System.out.println(new String(post.getResponseBody()));
post.releaseConnection();
(...)

如您所见,在 PostMethod 部分,我们在请求中发送参数。也许你不需要这个......

【讨论】:

  • 我也只需要使用 addRequestHeader 方法,它就可以完美运行。谢谢。
【解决方案2】:

您也可以使用 Visual Studio,我们还创建了一个 post 方法,用于拒绝 Kissflow 中的请求。只是让您知道您也可以在 Visual Studio 中执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2011-05-20
    相关资源
    最近更新 更多