[学习笔记]接口工具类

package com.skyland.utils;

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;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HttpInvoker {

    public static final String GET_URL = "";

    // 原先: http://
    public static final String POST_URL = "";    

    public static String readContentFromGet(String targetUrl,
            Map<String, String> params) throws IOException {

        // 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码

        String getURL = GET_URL + targetUrl + "?xx=1";
        if (params != null) {
            Set<String> key = params.keySet();
            for (Iterator it = key.iterator(); it.hasNext();) {
                String param = (String) it.next();
                String value = params.get(param);
                getURL += "&" + param + "="

                + URLEncoder.encode(value, "utf-8");
            }
        }
        URL getUrl = new URL(getURL);

        // 根据拼凑的URL,打开连接,URL.openConnection()函数会根据
        // URL的类型,返回不同的URLConnection子类的对象,在这里我们的URL是一个http,因此它实际上返回的是HttpURLConnection

        HttpURLConnection connection = (HttpURLConnection) getUrl
                .openConnection();

        // 建立与服务器的连接,并未发送数据

        connection.connect();

        // 发送数据到服务器并使用Reader读取返回的数据

        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream(), "utf-8"));// 设置编码,

        StringBuffer res = new StringBuffer();
        String lines;

        while ((lines = reader.readLine()) != null) {

            res.append(lines);

        }

        reader.close();

        // 断开连接

        connection.disconnect();

        return res.toString();

    }

    public static String readContentFromPost(String targetUrl,
            Map<String, String> params) throws IOException {

        // Post请求的url,与get不同的是不需要带参数

        URL postUrl = new URL(POST_URL + targetUrl);

        // 打开连接

        HttpURLConnection connection = (HttpURLConnection) postUrl
                .openConnection();

        // 打开读写属性,默认均为false

        connection.setDoOutput(true);

        connection.setDoInput(true);

        // 设置请求方式,默认为GET

        connection.setRequestMethod("POST");

        // Post 请求不能使用缓存

        connection.setUseCaches(false);

        // URLConnection.setFollowRedirects是static 函数,作用于所有的URLConnection对象。

        // connection.setFollowRedirects(true);

        // URLConnection.setInstanceFollowRedirects 是成员函数,仅作用于当前函数

        connection.setInstanceFollowRedirects(true);

        // 配置连接的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());

        // 正文内容其实跟get的URL中'?'后的参数字符串一致

        String content = "?firstname=" + URLEncoder.encode("test", "utf-8");

        if (params != null) {
            Set<String> key = params.keySet();
            for (Iterator it = key.iterator(); it.hasNext();) {
                String param = (String) it.next();
                String value = params.get(param);
                content += "&" + param + "="
                        + URLEncoder.encode(value, "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(), "utf-8"));// 设置编码,

        StringBuffer res = new StringBuffer(); 
        String line;
        while ((line = reader.readLine()) != null) {

            res.append(line);
        }

        reader.close();

        // connection.disconnect();

        return res.toString();
    }

    /*
     * 处理json数据中的特殊字符
     */
    public static String string2Json(String s) {
        s = s.replaceAll("\r\n", "</br>");
        return s;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值