使用类似Java客户端的curl和param

使用类似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

我使用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.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(“内容类型”、“二进制/八位字节流”)