如何在Java中向服务器发送POST请求?

4

我希望能够通过流的方式将一个字符串 "hello world" 发送到服务器。

目前为止,我的做法是:

private void PostData() {

        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        try {
            urlConnection.setDoOutput(true);
            urlConnection.setChunkedStreamingMode(0);

            OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
            writeStream(out);

            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            readStream(in);
            finally {
                urlConnection.disconnect();
            }
        }
    }

但是我不确定在哪里放置我想要发送数据的服务器的IP和端口?

我应该在哪里放置我想要发送的字符串,例如“hello world”?

而且我在这个方法中遇到了错误:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

在URL上:无法解析符号url。
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());

在 urlConnection.getOutputStream() 抛出未处理异常。
关于:
writeStream(out);

无法解决writeStream方法

readStream同理

最后关于finally:finally没有try

我从官方开发人员的Android com中找到了这个例子:

开发人员Android


你也可以使用来自Square的okhttp。关于你的第一个错误,url在哪里声明了? - Raghunandan
1
你有这个 URL url = new URL("你的网址"); 吗? - Raghunandan
5个回答

4

我看您是完全新手,而且该Android链接中的示例存在一些错误。对于您要执行的每个“网络”任务,您都必须在Android上异步执行它,同时还必须将网络权限添加到您的清单文件中。

例如:

注意:writeStreamreadStream是您自定义的函数,用于执行您想要它们执行的工作。


private void PostData() { 
    String IPPORT = "www.android.com"; // or example 192.168.1.5:80
    URL url = new URL("http://"+IPPORT+"/");
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try { 
        urlConnection.setDoOutput(true);
        urlConnection.setChunkedStreamingMode(0);

        OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
        writeStream(out);

        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        readStream(in);

    } 
    finally { 
        urlConnection.disconnect();
    } 
} 

写入流(writeStream)函数示例
private void writeStream(OutputStream out){
    String output = "Hello world";

    out.write(output.getBytes());
    out.flush();
}

3
你可以像这样做:-
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "text/plain");

        String input = YOUR_INPUT_STRING;

        OutputStream os = conn.getOutputStream();
        os.write(input.getBytes());
        os.flush();

0
   I had the same problem but with this code, I can solve

    String userAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0";
    String address = "http://localhost/form.php";
    String forSending = "cadena";
    String charset = "UTF-8";

    String stringToSend = URLEncoder.encode(forSending, charset);

    URL URL = new URL(address);
    URLConnection connection = URL.openConnection();
    connection.addRequestProperty("User-Agent", userAgent);

    connection.setDoOutput(true);
    OutputStreamWriter out = new OutputStreamWriter(
            connection.getOutputStream());
    out.write("nombre=" + stringToSend); 
    out.close();

    BufferedReader in = new BufferedReader(
            new InputStreamReader(
                    connection.getInputStream()));
    String response;
    while((response = in.readLine()) != null)
        System.out.println(response);
    in.close();

帮助链接:http://aljavier.github.io/manipulando-urls-y-haciendo-solicitudes-http-con-java.html 版权所有


0

嗯,恐怕你需要定义变量"url"和方法"writeStream"和"readStream"。

"url"应该是一个URL对象,其中包含你想要连接的地址(就像你在浏览器中输入的一样),请参考这里

WriteStream是你向服务器写入数据的地方,也就是你写入"Hello World"的地方。

ReadStream将从服务器读取响应。不幸的是,在这样的帖子中很难解释读取和写入数据的过程,但是有足够的教程可以帮助你。


0
  1. url 是 URL 类型的变量
  2. 你必须创建 readStream 和 writeStream 方法来读取/写入数据流。

您应该阅读有关 Java 流的内容,并记住在 Android 中必须将网络操作放在单独的线程中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接