`

一段关于HttpURLConnection的demo

    博客分类:
  • work
阅读更多

package test;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class HttpURLConnectionTest {

    public static final String GET_URL = "http://localhost:8080/welcome1";

    public static final String POST_URL = "http://localhost:8080/welcome1";

    public static void readContentFromGet() throws IOException {
        // 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码
        String getURL = GET_URL + "?username="
                + URLEncoder.encode("fat man", "utf-8");
        URL getUrl = new URL(getURL);
        // 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
        // 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
        HttpURLConnection connection = (HttpURLConnection) getUrl
                .openConnection();
        // 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
        // 服务器
        connection.connect();
        // 取得输入流,并使用Reader读取
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        System.out.println("=============================");
        System.out.println("Contents of get request");
        System.out.println("=============================");
        String lines;
        while ((lines = reader.readLine()) != null) {
            System.out.println(lines);
        }
        reader.close();
        // 断开连接
        connection.disconnect();
        System.out.println("=============================");
        System.out.println("Contents of get request ends");
        System.out.println("=============================");
    }

    public static void readContentFromPost() throws IOException {
        // Post请求的url,与get不同的是不需要带参数
        URL postUrl = new URL(POST_URL);
        // 打开连接
        HttpURLConnection connection = (HttpURLConnection) postUrl
                .openConnection();
        // Output to the connection. Default is
        // false, set to true because post
        // method must write something to the
        // connection
        // 设置是否向connection输出,因为这个是post请求,参数要放在
        // http正文内,因此需要设为true
        connection.setDoOutput(true);
        // Read from the connection. Default is true.
        connection.setDoInput(true);
        // Set the post method. Default is GET
        connection.setRequestMethod("POST");
        // Post cannot use caches
        // Post 请求不能使用缓存
        connection.setUseCaches(false);
        // This method takes effects to
        // every instances of this class.
        // URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
        // connection.setFollowRedirects(true);

        // This methods only
        // takes effacts to this
        // instance.
        // URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
        connection.setInstanceFollowRedirects(true);
        // Set the content type to urlencoded,
        // because we will write
        // some URL-encoded content to the
        // connection. Settings above must be set before connect!
        // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
        // 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
        // 进行编码
        connection.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");
        // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
        // 要注意的是connection.getOutputStream会隐含的进行connect。
        connection.connect();
        DataOutputStream out = new DataOutputStream(connection
                .getOutputStream());
        // The URL-encoded contend
        // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
        String content = "firstname=" + URLEncoder.encode("一个大肥人", "utf-8");
        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
        out.writeBytes(content); 

        out.flush();
        out.close(); // flush and close
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line;
        System.out.println("=============================");
        System.out.println("Contents of post request");
        System.out.println("=============================");
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println("=============================");
        System.out.println("Contents of post request ends");
        System.out.println("=============================");
        reader.close();
        connection.disconnect();
    }

    /** 
     * @param args
     */
    public static void main(String[] args) {
       
        try {
            readContentFromGet();
            readContentFromPost();
        } catch (IOException e) {
       
            e.printStackTrace();
        }
    }
}
 
分享到:
评论

相关推荐

    java微信企业付款Demo

    3. **接口秘钥设置**: 接口秘钥(API Key)是用于生成签名的重要参数,它是商户在微信商户平台上设置的一段密钥。每次发起请求时,都需要用这个秘钥生成一个签名,该签名会被微信服务器用于验证请求的真实性。 4. *...

    java-sms-1.1.rar_DEMO_短信

    【描述】中的“java开发短信源码 是一个DEMO,很实用”表明这是一段实际的源代码,供开发者学习和参考。DEMO通常是一个简化版的应用,展示了核心功能,而不涉及所有细节或完整实现。它强调实用性,意味着这个短信...

    java断点续传Demo

    在本Demo中,我们将探讨如何使用Java实现这一功能,特别是通过HTTP协议进行断点续传。 首先,我们需要理解HTTP协议中的Range请求头。在HTTP 1.1中,客户端可以通过设置Range请求头来指定希望从服务器获取数据的特定...

    Android Rss订阅源码Demo.zip

    【Android Rss订阅源码Demo】是一个专门为Android平台设计的示例项目,它演示了如何在Android设备上实现RSS(Really Simple Syndication)订阅功能。RSS是一种内容发布格式,广泛用于博客、新闻网站等,允许用户通过...

    Java抓取网页数据Demo

    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder ...

    对接语雀平台到本地的demo代码

    这段代码展示了如何使用HttpURLConnection发送POST请求创建新文档。 7. **错误处理**: 在实际开发中,对HTTP请求的响应码进行检查是必不可少的。通常,2xx表示成功,4xx和5xx表示错误。对于错误,需要根据具体...

    查询对账单下载地址接口demo(JAVA)版本

    在这个"查询对账单下载地址接口demo(JAVA)版本"中,我们将会探讨如何使用Java来实现这样一个功能。 首先,接口设计是关键。这个接口可能包括请求参数,如日期范围、账户ID或其他标识符,用于精确定位要查询的对账...

    java 第三方短信接口 demo及文档

    在IT行业中,第三方短信接口是实现业务流程自动...以上就是关于“java 第三方短信接口 demo及文档”的核心知识点。通过理解和实践这些步骤,开发者可以顺利地在Java项目中集成乐信短信服务,实现高效、可靠的短信功能。

    android手机客户端获取服务器端的json数据的demo

    以下是一个使用HttpURLConnection的简单示例: ```java URL url = new URL("http://yourserver.com/getsomedata"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(...

    Andriod连接URL并返回HTML源码DEMO

    这段代码创建了一个HttpURLConnection对象,设置了请求方法为GET,并获取了服务器响应的输入流。通过BufferedReader读取每一行数据并拼接成HTML源码字符串。 接下来是HTML源码的解析。在Android中,我们可以使用...

    Android下登录Demo(使用了读写Cookie操作)

    Cookie是由服务器发送到客户端(浏览器或Android应用)的一小段文本数据,包含了用户的会话信息,如登录状态、个性化设置等。当客户端发起新的请求时,会自动将对应的Cookie返回给服务器,使得服务器能够识别出用户...

    java高德地址解析demo

    本示例“java高德地址解析demo”聚焦于使用Java编程语言结合高德地图API来实现这一功能。高德地图API提供了一系列的服务,包括地理编码(地址转坐标)和反地理编码(坐标转地址),帮助开发者处理与地理位置相关的...

    Item上传照片demo

    在Android开发中,"Item上传照片demo"是一个典型的用户界面元素,它允许用户选择并上传照片到服务器或者应用内部存储。这个项目可能是一个模块或功能,用于社交媒体应用、电子商务平台或者任何需要用户提交图片信息...

    android连接服务器实现登录的demo

    3. **异步处理**: 由于网络操作可能需要一段时间,我们应该在后台线程中执行,避免阻塞主线程导致应用无响应。可以使用AsyncTask、Handler或Retrofit的回调方法来实现。 4. **用户界面**: 创建登录界面,包括用户名...

    易宝支付Demo(Java源代码)

    易宝支付Demo(Java源代码)是一个用于演示如何在Java环境中集成易宝支付服务的示例项目。易宝支付是中国知名的第三方支付平台,为商家提供便捷、安全的在线支付解决方案。这个Demo旨在帮助开发者快速理解和实施易宝...

    大内安卓学习资料demo全套

    【大内安卓学习资料demo全套】是一份全面的安卓开发学习资源集合,旨在为初学者提供一个月完整的学习路径。这份资料可能涵盖了从基础概念到实际应用的各种知识点,以帮助学习者扎实地掌握安卓开发技能。"达内"作为...

    Android网速监测demo

    "Android网速监测demo"是一个这样的应用实例,它能够每秒更新一次,展示当前的网络上传和下载速率。下面我们将详细探讨实现这一功能所涉及的关键知识点。 首先,我们要理解Android系统的网络API。Android提供了多种...

    android调用摄像头拍摄一段视频并上传到服务器

    这个Demo提供了完整的客户端和服务端源码,帮助开发者理解这一过程。以下将详细阐述涉及的知识点。 首先,我们需要了解如何在Android应用中调用摄像头。Android提供了Camera API和Camera2 API来访问和控制设备的...

    实现安卓与服务器的数据交互Demo

    1. **网络请求库的选择**:在安卓中,有多种库可以用来处理网络请求,如HttpURLConnection、Volley、Retrofit、OkHttp等。这里推荐使用Retrofit,它是一个非常流行且功能强大的库,提供了简洁的API来构建网络请求。 ...

    feed-reader-demo

    【标题】"feed-reader-demo" 是一个以Java编程语言实现的Android应用示例,主要用于演示如何在原生Android环境中读取并展示网络RSS或Atom提要。这个项目为开发者提供了一个学习基础的网络数据获取和界面展示技术的...

Global site tag (gtag.js) - Google Analytics