使用类似Java客户端的curl和param
我使用XDB 0.9。在这个版本中,我可以像使用类似Java客户端的curl和param,java,http,curl,http-post,influxdb,Java,Http,Curl,Http Post,Influxdb,我使用XDB 0.9。在这个版本中,我可以像 curl -XPOST 'http://localhost:8086/write?db=mydb' -d 'cpu,host=server01,region=uswest value=1.0' 现在我把它转换成java URL url = new URL("http", "localhost", 8086, "/write?db=mydb"); HttpURLConnection con = (HttpURLConnection) url.open
curl -XPOST 'http://localhost:8086/write?db=mydb' -d 'cpu,host=server01,region=uswest value=1.0'
现在我把它转换成java
URL url = new URL("http", "localhost", 8086, "/write?db=mydb");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
OutputStream wr = con.getOutputStream();
Stirng s = "cpu,host=server01,region=uswest value=51.0";
wr.write(s.getBytes(UTF_8));
wr.flush();
wr.close();
但它不起作用。“-d”是否表示post参数?我如何用Java来表达呢?在本例中,
curl
标志实际上应该是--data binary
,而不是-d
,它们可以有不同的编码。只要您的字符串没有被Java代码改变,它就应该是好的。任何类似URL编码的操作都会阻止线路协议插入工作。您还需要获取HTTP响应。以下几点对我很有用:
import java.net.*;
import java.io.*;
import java.util.*;
public class Client {
private static HttpURLConnection client;
public static void main(String[] args) {
try {
Random rn = new Random();
URL input;
while(true) {
input = new URL("http", "localhost", 8086, "/write?db=mydb");
client = (HttpURLConnection) input.openConnection();
client.setRequestMethod("POST");
client.setDoOutput(true);
double thermals = rn.nextDouble();
String s = "cpu_temperature value=" + thermals;
try (OutputStreamWriter writer =
new OutputStreamWriter(client.getOutputStream())) {
writer.write(s);
}
BufferedReader in = new BufferedReader(new InputStreamReader(
client.getInputStream()));
String decodedString;
while ((decodedString = in.readLine()) != null) {
System.out.println(decodedString);
}
in.close();
System.out.println(s); // for debugging
Thread.sleep(1000); // send data every 1 second
}
} catch(MalformedURLException error) {
System.out.println("Malformed URL!");
} catch(SocketTimeoutException error) {
System.out.println("Socket Timeout Exception!");
} catch (IOException error) {
System.out.println("IOException!");
System.out.println(error);
} catch(InterruptedException e) {
System.out.println("InterruptedException!");
} finally {
if(client != null) { // Make sure the connection is not null.
client.disconnect();
}
}
}
}
您的SQL查询需要更正。Remove“,”in“cpu,host=”它会工作。我现在无法测试代码,但在发布之前尝试使用URLEncoder对字符串进行编码。或者,Apache HTTPClient更容易使用,这是正确的。从建立到二进制的连接<代码>con.setRequestProperty(“内容类型”、“二进制/八位字节流”)但是它总是让我困惑。如果需要工作,则必须读取请求,如'in=new BufferedReader(new InputStreamReader(con.getInputStream());in.close();'http post是否只有读取请求才能让它工作?我对Java的了解不够,无法理解您的问题,我深表歉意。如果写入失败,XDB日志中有什么内容?