HttpURLConnection和URLConnection的使用-后端调用第三方api(http)接口

HttpURLConnection和URLConnection的使用-后端调用第三方api(http)接口

HttpURLConnection和URLConnection的使用

介绍

Java网络连接(HttpURLConnection,URLConnection)

HttpURLConnection和URLConnection API

HttpURLConnection的API

方法名 返回类型 描述
public void setRequestMethod(String method) void 用于设置请求方式,例如GET,POST等
public void setRequestProperty(String key, String value) void 用于设置请求头的属性,其中key是属性的名称,value是属性的值
public void setDoOutput(boolean dooutput) void 用于设置是否向HttpURLConnection输出,如果是POST请求,必须设置为true
public void setDoInput(boolean doinput) void 用于设置是否从HttpURLConnection读入,如果是POST请求,必须设置为true
public InputStream getInputStream() InputStream 用于获取返回的数据,返回的是一个InputStream对象

URLConnection 的API

方法名 返回类型 描述
public void setRequestProperty(String key, String value) void 用于设置请求头的属性,其中key是属性的名称,value是属性的值
public InputStream getInputStream() InputStream 用于获取返回的数据,返回的是一个InputStream对象

案例

以下是一个使用HttpURLConnection进行GET请求的例子,注释详细解释了每一步的操作:

public class ConnectionUtil {
    private String url;

    public ConnectionUtil(String url) {
        this.url = url;
    }

    public BufferedReader getBufferedWriter(ConnectionMethod method, Map<String, String> map) {
        try {
            // 如果有查询参数,将其附加到url后面
            if (map != null) {
                boolean verify = true;
                for (String key : map.keySet()) {
                    url += (verify ? "?" : "&") + key + "=" + map.get(key);
                    verify = false;
                }
            }

            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
            conn.setRequestMethod(method.value);

            // 设置请求头的属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");

            // 对于POST请求,需要设置DoOutput和DoInput为true
            if (ConnectionMethod.POST == method) {
                conn.setDoOutput(true);
                conn.setDoInput(true);
            }

            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            return reader;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

@AllArgsConstructor
public enum ConnectionMethod {
    GET("GET"),POST("POST");
    String value;
}

注意事项

  1. 在使用HttpURLConnection进行网络连接时,我们需要处理异常,因为网络连接可能因为各种原因出现问题,我们需要捕获这些异常并进行适当的处理。
  2. 当我们设置请求方法为POST时,需要设置DoOutputDoInput为true,否则可能导

致请求失败。

  1. 在设置请求属性时,我们需要知道各个属性的含义,例如accept表示客户端接受的MIME类型,connection表示是否持久连接,user-agent表示用户代理,即浏览器版本等信息,Content-Type表示发送信息至服务器的内容类型。对这些属性的理解有助于我们设置正确的请求头。