HttpURLConnection类的使用

此类以获取天气的一个api地址为例:

package javaexcjs;

import java.io.BufferedReader;
import java.io.OutputStreamWriter;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;
import java.net.URLEncoder;

import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class CopyOfSendPostRequest {
    static String sessionId = "";

    public static void main(String[] args) throws Exception {
        
        //城市名称
        String city = URLEncoder.encode("重庆", "GB2312");
        System.out.println(city);
        // api url :北向URL
        String locationUrl = "http://php.weather.sina.com.cn/xml.php?city=" + city + "&password=DJOYnieT8234jlsK&day=0";

        // http body 消息体
        String reqBody = "";

        // http method
        String method = "POST";

        // http head : Content-Type 消息类型
        String contentType = "application/json;charset=UTF-8";

        // 设定连接的相关参数
        URL url = new URL(locationUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setReadTimeout(10000);
        connection.setRequestMethod(method);
        connection.setRequestProperty("Content-Type", contentType);

        //写入请求消息体
        OutputStreamWriter out = new OutputStreamWriter(
                connection.getOutputStream(), "UTF-8");
        out.write(reqBody);
        out.flush();
        out.close();

        // 获取服务端的反馈
        String strLine = "";
        StringBuilder strResponse = new StringBuilder();
        try {
            Map<String, List<String>> rspHeaders = connection.getHeaderFields();

            Set<String> rspHeadNames = rspHeaders.keySet();
            for (String key : rspHeadNames) {
                //rspHeaders中的http状态码和描述的键为null
                if (null != key) {
                    strResponse.append(key + ": ");
                }
                strResponse.append(new String(rspHeaders.get(key).get(0)
                        .getBytes("iso-8859-1"), "UTF-8")
                        + "
");
            }

            int code = connection.getResponseCode();
            // String status = connection.getResponseMessage();
            InputStream in;

            // 判断http状态码
            if (code == 200) {
                in = connection.getInputStream();
            } else {
                in = connection.getErrorStream();
            }
            if (null != in) {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(in));

                while ((strLine = reader.readLine()) != null) {
                    strResponse.append("
" + strLine);
                }
            }
            System.out.print(strResponse.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
View Code
原文地址:https://www.cnblogs.com/fengdeng/p/5807212.html