Android_HttpUrlConnection

基本使用

HttpURLConnection是一个抽象类,需要通过 url.openConnection()获取实例

HttpURLConnection connection = null;
            try {
                URL url = new URL("https://www.baidu.com/");
                connection = (HttpURLConnection) url.openConnection();
                InputStream is = connection.getInputStream();
                String result = readInputStream(is);
                Log.d("", result);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(connection != null) {
                    connection.disconnect();
                }
            }

Android 主线程不能执行网络操作,上面代码需要放到工作线程中执行。
connection.connect();会被getOutputStream调用,所以不需手动调用
HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。

getOutputStream

无论是post还是get请求,http请求实际上直到HttpURLConnection的getInputStream()这个函数里面才正式发送出去。所以对outputStream的写操作,必须要在inputStream的读操作之前。

connection.setRequestMethod("POST");

                OutputStream outStrm = connection.getOutputStream();
                ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); 
                // 向对象输出流写出数据,这些数据将存到内存缓冲区中 
                objOutputStrm.writeObject(new String("我是测试数据")); 
                // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) 
                objOutputStrm.flush(); 
                // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, 
                // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 
                objOutputStrm.close(); 

getInputStream

getInputStream()这个函数里面才正式发送请求

InputStream is = connection.getInputStream();
                String result = readInputStream(is);

readInputStream函数

private String readInputStream(InputStream is) {
    InputStreamReader isReader = new InputStreamReader(is);
    BufferedReader bufferReader = new BufferedReader(isReader);
    String inputLine = null;
    StringBuffer result = new StringBuffer();
    try {
        while ((inputLine = bufferReader.readLine()) != null) {
            result.append(inputLine);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return result.toString();
}

参数

在用POST方式发送URL请求时,URL请求参数的设定顺序是重中之重,对connection对象的一切配置(那一堆set函数)都必须要在connect()函数执行之前完成。
1、设置是否向httpUrlConnection输出,默认情况下是false。使用httpUrlConnection.getOutputStream(),把内容输出到远程服务器上。

httpUrlConnection.setDoOutput(true);

2、设置是否从httpUrlConnection读入,默认情况下是true。使用httpUrlConnection.getInputStream(),从远程服务器上得到响应的内容。

httpUrlConnection.setDoInput(true);

3、是否使用缓存。

httpUrlConnection.setUseCaches(false);

4、设定传送的内容类型是可序列化的java对象 (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)。

httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");

5、设定请求的方法为”POST”,默认是GET 。

httpUrlConnection.setRequestMethod("POST");

你可能感兴趣的:(Android_HttpUrlConnection)