2019独角兽企业重金招聘Python工程师标准>>>

1、GET与POST请求的区别

a) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,

b) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。

2、URLConnection的对象

a) 获取URLConnection实例

URL url = new URL(urlString);
// 根据url生成urlConnection对象
urlConnection = (HttpURLConnection) url.openConnection();

b) 常见参数设置

// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true, 默认情况下是false;
httpUrlConnection.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true;
httpUrlConnection.setDoInput(true); // Post 请求不能使用缓存
httpUrlConnection.setUseCaches(false); // 设定传送的内容类型是可序列化的java对象
// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object"); // 设定请求的方法为"POST",默认是GET
httpUrlConnection.setRequestMethod("POST");//设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。
System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);
System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);

c) HttpURLConnection写数据与发送数据问题

// 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。
OutputStream outStrm = httpUrlConnection.getOutputStream();
ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); // 向对象输出流写出数据,这些数据将存到内存缓冲区中
objOutputStrm.writeObject(new String("我是测试数据")); // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream)
objOutputStm.flush(); // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中,
// 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器
objOutputStm.close(); // 调用HttpURLConnection连接对象的getInputStream()函数,
// 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。
InputStream inStrm = httpConn.getInputStream(); // <===注意,实际发送请求的代码段就在这里 // 上边的httpConn.getInputStream()方法已调用,本次HTTP请求已结束,下边向对象输出流的输出已无意义// 既使对象输出流没有调用close()方法,下边的操作也不会向对象输出流写入任何数据.
// 因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、
// 重新发送数据(至于是否不用重新这些操作需要再研究)
objOutputStm.writeObject(new String(""));
httpConn.getInputStream();

3、代码实例

package org.zhangsm.httpRequest;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;/*** 使用Java原生的API发送Http请求,即java.net.URL、java.net.URLConnection。* 步骤如下:* 1、通过统一资源定位符获取连接器* 2、设置请求的参数* 3、以输入流的形式获取返回内容* 4、关闭输入流* @author zhang.shuming**/
public class HttpRequest {public static void main(String[] args) throws Exception {System.out.println(send("http://www.baidu.com", "GET", null, null));}private static String send(String urlString,String method,Map<String,String> parameters,Map<String,String> propertys) throws Exception{HttpURLConnection urlConnection = null;if(method.equalsIgnoreCase("GET") && parameters != null){StringBuffer param = new StringBuffer();int i = 0;for(String key : parameters.keySet()){if(i == 0) param.append("?");else param.append("&");param.append(key).append("=").append(parameters.get(key));i++;}urlString += param;}URL url = new URL(urlString);// 根据url生成urlConnection对象urlConnection = (HttpURLConnection) url.openConnection();// 设置参数urlConnection.setRequestMethod(method);urlConnection.setDoOutput(true);urlConnection.setDoInput(true);urlConnection.setUseCaches(false);if(propertys != null){for(String key : propertys.keySet()){urlConnection.addRequestProperty(key, propertys.get(key));}}if(method.equalsIgnoreCase("POST") && parameters != null){StringBuffer param = new StringBuffer();for(String key : parameters.keySet()){param.append("&");param.append(key).append("=").append(parameters.get(key));}urlConnection.getOutputStream().write(param.toString().getBytes());urlConnection.getOutputStream().flush();urlConnection.getOutputStream().close();}return makeContent(urlString,urlConnection);}private static String makeContent(String urlString,HttpURLConnection urlConnection)throws IOException{InputStream in = urlConnection.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));StringBuffer temp = new StringBuffer();String line;while((line = bufferedReader.readLine()) != null){temp.append(line);}bufferedReader.close();return temp.toString();}
}

转载于:https://my.oschina.net/u/1425545/blog/493276

通过java.net.URLConnection发送HTTP请求的方法相关推荐

  1. JAVA通过HTTPS发送POST请求的方法

    因为调用一个外部接口,会用到POST请求,而且还是Https的,但是由于之前学习的时候没有用到,所以研究了很久才弄懂了怎么去用JAVA实现Https发送post请求 使用的是HttpsURLConne ...

  2. 通过java.net.URLConnection发送HTTP请求

    为什么80%的码农都做不了架构师?>>>    最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给服务器,post与get ...

  3. java的connect和http_【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

    Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...

  4. python写页面发送post请求_Python模拟浏览器向CSDN发送post请求的方法,POST

    目录 1.发送get请求的方法 import requests import json def GET(url): #get请求 req = requests.get(url) #输出状态码 prin ...

  5. [js] 说说防止重复发送ajax请求的方法有哪些?各自有什么优缺点?

    [js] 说说防止重复发送ajax请求的方法有哪些?各自有什么优缺点? // 方法一 防抖function debounce(f, ms) { let time; return function(){ ...

  6. Python模拟浏览器向 CSDN发送POST请求的方法

    目录 1.发送get请求的方法 2.发送post请求的方法 3.我们模拟CSDN发送POST的请求流程: 4.双击该方法:获取返回值如下 5.现在,我们使用python进行模拟浏览器的post请求提交 ...

  7. 5种最流行的发送HTTP请求的方法

    现代Javascript提供了许多向远程服务器发送HTTP请求的方法.从原生XMLHttpRequest对象到Axios等第三方库,拥有如此丰富的选择集合使得在web应用程序中请求和动态加载内容比以往 ...

  8. java post xmll_HttpClient发送Post请求,内容格式为xml,并获取响应内容

    ChannelDistributor.xml 内容如下: yisou abcd1234 10010000 00 1).HttpClient发送Post请求,内容格式为xml,并获取响应内容 impor ...

  9. Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie

    1. 引入所需网络请求类: var URL = plus.android.importClass("java.net.URL");var URLConnection = plus. ...

最新文章

  1. 我的fedora10的virtual box网络设置
  2. 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
  3. 数据结构和算法之单链表
  4. Extended Twin Composite Number
  5. html如何播放h264视频,浏览器 – 我如何播放H264视频?
  6. pythondict初始化_利用defaultdict对字典进行全局初始化。
  7. day30 并发编程
  8. springmvc中@RequestMapping的使用
  9. 图片超大 html,解决WebView加载html文本时,图片太大不能适配屏幕
  10. matlab插值法计算根号,怎么用matlab利用拉格朗日插值计算法的原理编写并计算函数所在节点的近似值....
  11. 谈谈我对面向对象的理解
  12. python暑假培训成都
  13. 智能家居为什么跑不出“独角兽”?
  14. 【免填邀请码】让邀请裂变活动事半功倍
  15. 本地使用Idea创建SpringBoot项目并给gitee托管
  16. emlog模板开发基础2022最新指南
  17. SQL CAST与CONVERT区别
  18. Photoshop插件--证件照--1寸裁剪--1寸排版--脚本开发--PS插件
  19. 2022年中职组“网络安全”赛项湖南省任务书
  20. 互联网医疗的定义及架构

热门文章

  1. 接口继承中一个常见问题的思考
  2. (二)docker安装并持久化postgresql数据库
  3. 浅谈:数据结构之双链表结构与代码模拟双链表的实现
  4. Flutter入门:dart基础
  5. H3C 使用命令视图
  6. JQuery多个异步操作后执行(resolve,promise,when,done)
  7. 最近在玩linux时 yum 遇到了问题
  8. 原生态Vim使用快捷键
  9. http接口服务方结合策略模式实现总结
  10. 【剑指offer】面试题43:n个骰子的点数