两种请求方式
URL请求通常有两种方式:GET请求和POST请求
GET请求的数据会附在URL之后,通过?来拼接所传的参数,参数之间以&相连。请求中发送的参数如果是字母或者数字则按照原样发送,空格则转换为+,中文或者其他字符则按照base64位加密,得到%E4%BD%A0%E5%A5%BD
类似的形式,其中%xx为该符号以16进制表示的ASCII码。
POST请求的参数不是放在URL字符串里面,而是放在HTTP请求的正文内,请求的参数被封装起来以流的形式发送给服务端。
两者主要的区别:GET请求参数直接拼接在URL后面,隐私性较差,长度可能会受限制,GET请求能够被缓存,一般请求的默认为GET;POST请求通过实体内容传参数隐私性好,大小没有限制,POST请求不能被缓存下来,需要声明采用POST。
一般,Get是向服务器索取数据的一种请求,而Post是向服务器提交数据的一种请求。
HttpURLConnection使用
HttpURLConnection它继承自URLConnection,可用于向指定网站发送GET请求、POST请求。
URL url = new URL("URL");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
1.通过调用URL.openConnection()来获得一个新的HttpURLConnection对象,结果强制转换为HttpURLConnection
2.准备请求。参数为URI。请求头可能也包含元数据,例如证书或者约定好的请求内容。
3.可以选择性的上传一个请求体。HttpURLConnection实例必须设置setDoOutput(true)
,如果它包含一个请求体。通过将数据写入一个由getOutStream()返回的输出流来传输数据。
4.读取响应。响应头通常包含元数据例如响应体的内容类型和长度,修改日期和会话cookies。响应体可以被由getInputStream返回的输入流读取。如果响应没有响应体,则该方法会返回一个空的流。
5.关闭连接。一旦一个响应体已经被阅读后,HttpURLConnection 对象应该通过调用disconnect()关闭。断开连接会释放被一个connection占有的资源,这样它们就能被关闭或再次使用。
步骤:
创建url实例(基本固定)
URL url=new URL("请求的url");
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
连接设置
connection.setRequestMethod("POST");//设置请求方式,默认为GET
connection.setDoOutput(true);//设置是否向httpUrlConnection输出,post请求,参数要放在http正文内,需要设为true; 默认情况下是false。
connection.setDoInput(true);//是否从httpUrlConnection读入,默认情况下是true;
connection.setUseCaches(false);//设置是否使用缓存,Post请求不能缓存
connection.setInstanceFollowRedirects(true);//设置超时时间
设置请求头参数
connection.setRequestProperty("Accept", "application/json");
setRequestProperty(key,value);
addRequestProperty(key,value);
setRequestProperty会覆盖已经存在的key的所有values,有清零重新赋值的作用。而addRequestProperty则是在原来key的基础上继续添加其他value。
发送请求
connection.connect();
getOutputStream
getOutputStream会隐含的进行connect(等同于调用上面的connect()方法, 不调用connect()也可以)
获取响应
connection.getContent()
connection.getInputStream()
connection.getHeaderField ()
对于大部分请求,getInputStream和getContent最常用。