HttpUrlConnection发送GET、POST请求

之前在使用AsyncHttpClient的时候,遇到在Android6.0后找不到HttpClient的问题,后来官方更新了1.4.9版本替换了HttpClient为第三方的cz.msebera.android.httpclient。了解到Google在Android6.0后移除了HttpClient,推荐使用HttpUrlConnection实现http请求,并且许多其他第三方网络请求框架都是改为以HttpUrlConnection为基础,故此认为有必要熟悉一下其基本用法。

使用的流程:


1


创建URL对象


URL url = new URL("http://qq.com");


2


实例化HttpUrlConnection对


conn = (HttpURLConnection) url.openConnection();


3


设置请求的相关属性,post传值等


conn.setRequestMethod("POST");conn.setDoOutput()等


4


获取返回码,判断连接成功与否


if (conn.getResponseCode() == HttpURLConnection.HTTP_OK)


5


读取输入流


InputStream is = conn.getInputStream();


6


关闭连接、输入流


conn.disconnect(); is.close();

Get请求:

//HttpUrlConnection默认就是Get请求,最简单的情况下什么都不需要设置。

conn = (HttpURLConnection) url.openConnection();

InputStream is = conn.getInputStream();

Get请求示例代码:

try {
    URL url = new URL("http://112.124.63.181/mm/Api/Public/timestamp");
    conn = (HttpURLConnection) url.openConnection();

    InputStream is = conn.getInputStream();
    reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        sb.append(line);
    }
    showText(sb.toString());
} catch (IOException e) {
    e.printStackTrace();
}finally {
    if (conn != null){conn.disconnect();}
    if (reader != null){
        try {
            reader.close();
        } catch (IOException e) {e.printStackTrace();}
    }
}

Post请求:

Post和Get的主要区别:

conn.setRequestMethod("POST");

conn.setDoOutput(true);//允许向服务器提交数据

conn.setUseCaches(false);//Post不是用缓存

String body ="password=e10adc3949ba59abbe56e057f20f883e&username=test3";

OutputStream os = conn.getOutputStream();

os.write(body.getBytes());

os.flush();

os.close();

InputStream is = conn.getInputStream();

...

提交数据:

OutputStream os = conn.getOutputStream();

os.write(body.getBytes());

os.flush();

os.close();

直接使用低级字节流输出String转换后的字节数组。

DataOutputStream dos = new DataOutputStream(os);

OutputStreamWriter writer = new OutputStreamWriter(os);

BufferedWriter writer = new BufferedWriter(newOutputStreamWriter(os));

使用高级字符流可以相对比较方便地输出字符串、文件等。

Post请求示例代码:

String urlString = "http://120.77.156.236/mm/Api/Base/checkLogin";
String bodyString = "password=e10adc3949ba59abbe56e057f20f883e&username=test3";

URL url = new URL(urlString);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

OutputStream os = conn.getOutputStream();
os.write(bodyString.getBytes("utf-8"));
os.flush();
os.close();

if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    InputStream is = conn.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        sb.append(line);
    }
    return sb.toString();
}

常用设置方法:

// 设置请求方法,默认是GET

conn.setRequestMethod("GET");

//设置连接服务器超时

conn.setConnectTimeout(8000);

//设置读取服务器数据超时

conn.setReadTimeout(5000);

//设置是否使用缓存

conn.setUseCaches(true);

// 设置使用的字符集

conn.setRequestProperty("Charset","UTF-8");

// 设置内容类型信息

conn.setRequestProperty("Content-Type","application/json");

// 设置自定义参数

conn.setRequestProperty("MyKey","MyValue");

//设置是否允许输出,默认为false,Post提交数据时必须为true

conn.setDoOutput

//设置是否允许输入,默认为true,这样getInputStream才有值

conn.setDoInput

//设置每次传输的流大小,防止手机内存不足

conn.setChunkedStreamingMode(51200);

//开始连接,并不需要显式调用,调用getInputStream或getResponseCode等方式时都会间接调用。

conn.connect();

时间: 2024-11-05 21:58:12

HttpUrlConnection发送GET、POST请求的相关文章

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比 在项目中需要使用http调用接口,实现了两套发送http请求的方法,一个是使用apache的httpclient提供的http链接池来发送http请求,另一个是使用java原生的HttpURLConnection来发送http请求,并对两者性能进行了对比. 使用httpclient中的链接池发送http请求 使用最新的4.5.2版httpclient进行实现.在maven中引入 <

HttpURLConnection发送请求

每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络.请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的网络资源,但对共享的持久连接没有任何影响.如果在调用 disconnect() 时持久连接空闲,则可能关闭基础套接字.JAVA使用HttpURLConnection发送POST数据是依靠OutputStream流的形

Http学习之使用HttpURLConnection发送post和get请求(3)

使用HttpURLConnection发送post和get请求 但我们常常会碰到这样一种情况: 通过HttpURLConnection来模拟模拟用户登录Web服务器,服务器使用cookie进行用户认证.在模拟登录时,Post表单数据后可以正确登录(登陆成功时会response一个cookie,然后redirect到main page,不成功则redirect到login page),但是在使用HttpURLConnection再次连接服务器其他页面(或者即使是当前的response里是redir

HttpUrlConnection发送url请求(后台springmvc)

1.HttpURLConnection发送url请求 public class JavaRequest { private static final String BASE_URL = "http://localhost:8080/dsdemo/"; public static String userToken = null; public static String problemName = null; public static String sendPost(String su

Http学习之使用HttpURLConnection发送post和get请求(2)

接上节Http学习之使用HttpURLConnection发送post和get请求 本节深入学习post请求. 上 节说道,post请求的OutputStream实际上不是网络流,而是写入内存,在getInputStream中才真正把写道流里面的内容作为正文与 根据之前的配置生成的http request头合并成真正的http request,并在此时才真正向服务器发送. HttpURLConnection.setChunkedStreamingMode 函数可以改变这个模式,设置了Chunke

【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目

备份短信和添加短信 操作系统短信的uri: content://sms/ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.backupsms" android:versionCode="1

JAVA使用原始HttpURLConnection发送POST数据

package com.newflypig.demo; /** * 使用jdk自带的HttpURLConnection向URL发送POST请求并输出响应结果 * 参数使用流传递,并且硬编码为字符串"name=XXX"的格式 */ import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnectio

httpurlconnection发送文件到服务端并接收

httpurlconnection发送文件到服务端并接收 客户端 import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; /* * @author xk * 上传文件到文件服务器的客户端 */ public clas

调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案

第一次调用webapi出错如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>IIS 7.5 详细错误 - 4