首页 > 解决方案 > 将 CURL 转换为 JAVA 以使用数据进行 PUT 请求

问题描述

我正在尝试将以下 CURL 请求转换为 Java

curl -H "public-api-token: 29sds38sd38xc339332dssdsdk22" -X PUT -d "testParameter=param1" https://server.com/url

(我出于其他原因编辑了服务器名称和参数名称,但请放心,当从终端执行上述命令时,它们工作得很好)

我已经到达以下但现在我被卡住了,因为我找不到可能导致错误的原因:

import java.net.*;
import java.io.*;

public class HelloWorld {

    public static void main(String[] args) {
        System.out.print(getResponseFromHttpUrl());
    }

    public static String getResponseFromHttpUrl() throws IOException {
        URL url = new URL("https://server.com/url");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("PUT");
        urlConnection.addRequestProperty("Accept", "application/json");
        urlConnection.addRequestProperty("Content-Type", "application/json");
        urlConnection.addRequestProperty("public-api-token", "29sds38sd38xc339332dssdsdk22");
        String strFileContents = "";

        try {
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.setChunkedStreamingMode(0);

            OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
            BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(out, "UTF-8"));
            writer.write("testParameter=param1");
            writer.flush();
            writer.close();
            out.close();

            urlConnection.connect();

            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            byte[] contents = new byte[1024];

            int bytesRead = 0;
            while ((bytesRead = in .read(contents)) != -1) {
                strFileContents += new String(contents, 0, bytesRead);

            }

        } catch( Exception e ) {
        // if a more general exception was thrown, handle it here
            System.out.println(e.getMessage());
        } finally {
            urlConnection.disconnect();
        }


        return strFileContents;

    }

}

我怀疑我提供数据的方法可能是错误的,但不确定。有什么建议么?

PS:显示的错误是

HelloWorld.java:8:错误:未报告的异常 IOException;必须被捕获或声明被抛出 System.out.print(getResponseFromHttpUrl());

标签: javacurlhttpurlconnectionput

解决方案


该消息的含义正是它所说的。您必须要么catchIOException,要么声明抛出它的方法。

第二种选择是更好的选择。改变这个:

public static void main(String[] args) {

对此:

public static void main(String[] args) throws IOException {

推荐阅读