【发布时间】:2015-02-03 04:22:56
【问题描述】:
我有一个 localhost 服务器在端口 4000 上运行,它监听发送给它的请求并执行命令并以 json 格式将输出返回给客户端。
我正在尝试从 tomcat 的端口 8080 向它发送请求,我需要它来执行命令并将输出以 json 格式发送回。
我可以通过 php 使用 curl 并执行命令,但我需要 java 中的解决方案,所以我编写了以下代码:
public String sendData() throws IOException {
// curl_init and url
URL url = new URL("http://localhost:4000");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// CURLOPT_POST
con.setRequestMethod("POST");
// CURLOPT_FOLLOWLOCATION
con.setInstanceFollowRedirects(true);
String postData = "ls"; //just trying a simple command
con.setRequestProperty("Content-length", String.valueOf(postData.length()));
con.setDoOutput(true);
con.setDoInput(true);
DataOutputStream output = new DataOutputStream(con.getOutputStream());
output.writeBytes(postData);
output.close();
// "Post data send ... waiting for reply");
int code = con.getResponseCode(); // 200 = HTTP_OK
System.out.println("Response (Code):" + code);
System.out.println("Response (Message):" + con.getResponseMessage());
// read the response
DataInputStream input = new DataInputStream(con.getInputStream());
int c;
StringBuilder resultBuf = new StringBuilder();
while ( (c = input.read()) != -1) {
resultBuf.append((char) c);
}
input.close();
return resultBuf.toString();
}
我收到了"OK" 的响应和端口 4000 的默认输出。但是该命令没有执行。
知道我错过了什么吗?还是做错了?
按需编辑:php curl 函数
protected function HTTPRequest($url, $command){
//open connection
$ch = curl_init();
$fields['command'] = $command;
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
return $result;
}
$url 这里是http://localhost:4000
和 $command 只是通过任何命令。
【问题讨论】:
-
您是否检查了在端口 4000 上运行的应用程序?那收到请求了吗?是否能够成功读取命令?
-
请向我们展示有效的
curl命令。并告诉您的 servlet 中发生了什么。我觉得奇怪的是使用DataOutputStream。尝试不使用它,只需简单的 con.getOutputStream。 -
@ramp,使用 php curl 命令可以。但是对于上面的java,没有。它只响应服务器的默认响应。
-
@hgoebl 当然,我会编辑这个问题。我也会试试你的建议。
-
@hgoebl con.getOuputStream 没有输出。
标签: java json jsp curl httpurlconnection