Java发送HTTP POST请求示例
概述:
http请求在所有的编程语言中几乎都是支持的,我们常用的两种为:GET,POST请求。一般情况下,发送一个GET请求都很简单,因为参数直接放在请求的URL上,所以,对于PHP这种语言,甚至只需要一行:file_get_content(url);就能完成数据的获取,但对于POST请求,由于其数据是在消息体中发送出去的,所以相对来说要麻烦一点,再涉及到需要发送文件等二进制的数据类型,就更需要更多的处理,下面我们用Java语言来实现POST请求发送数据,其他语言类似。
- public class MainUI {
- private static final String REQUEST_PATH = "http://localhost/server_url.php";
- private static final String BOUNDARY = "20140501";
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- URL url = new URL(REQUEST_PATH);
- HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
- httpConn.setConnectTimeout(3000); // 设置发起连接的等待时间,3s
- httpConn.setReadTimeout(30000); // 设置数据读取超时的时间,30s
- httpConn.setUseCaches(false); // 设置不使用缓存
- httpConn.setDoOutput(true);
- httpConn.setRequestMethod("POST");
- httpConn.setRequestProperty("Connection", "Keep-Alive");
- httpConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
- httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
- OutputStream os = httpConn.getOutputStream();
- BufferedOutputStream bos = new BufferedOutputStream(os);
- String content = "--" + BOUNDARY + "\r\n";
- content += "Content-Disposition: form-data; name=\"title\"" + "\r\n\r\n";
- content += "我是post数据的值";
- content += "\r\n--" + BOUNDARY + "\r\n";
- content += "Content-Disposition: form-data; name=\"cover_img\"; filename=\"avatar.jpg\"\r\n";
- content += "Content-Type: image/jpeg\r\n\r\n";
- bos.write(content.getBytes());
- // 开始写出文件的二进制数据
- FileInputStream fin = new FileInputStream(new File("avatar.jpg"));
- BufferedInputStream bfi = new BufferedInputStream(fin);
- byte[] buffer = new byte[4096];
- int bytes = bfi.read(buffer, 0, buffer.length);
- while (bytes != -1) {
- bos.write(buffer, 0, bytes);
- bytes = bfi.read(buffer, 0, buffer.length);
- }
- bfi.close();
- fin.close();
- bos.write(("\r\n--" + BOUNDARY).getBytes());
- bos.flush();
- bos.close();
- os.close();
- // 读取返回数据
- StringBuffer strBuf = new StringBuffer();
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- httpConn.getInputStream()));
- String line = null;
- while ((line = reader.readLine()) != null) {
- strBuf.append(line).append("\n");
- }
- String res = strBuf.toString();
- System.out.println(res);
- reader.close();
- httpConn.disconnect();
- }
- }
下面,对上述的代码做一些必要的说明:
http发送的post数据是通过boundary和换行符来分割的,boundary是一个随机的字符串即可,但不要与你传递的参数名或参数值相同。
换行符要求也是比较严格的,数据的声明和数据的值之间需要两个换行符,两个数据之间要用boundary来划分。对于二进制的数据来说,只是参数的类型声明和普通的数据有点区别,比如上述的代码增加了filename和content-type,二进制的数据以字符流写出去就行了。
Java发送HTTP POST请求示例的更多相关文章
- java发送http get请求的两种方式
长话短说,废话不说 一.第一种方式,通过HttpClient方式,代码如下: public static String httpGet(String url, String charset) thro ...
- Java 发送http post 请求
package com.sm.utils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.i ...
- java 发送get,post请求
package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- Java发送HTTP POST请求(内容为xml格式)
今天在给平台用户提供http简单接口的时候,顺便写了个调用的Java类供他参考. 服务器地址:http://5.0.217.50:17001/VideoSend 服务器提供的是xml格式的h ...
- java 发送http json请求
public void getRemoteId(HttpServletRequest request,Model model){ String name = request.getParameter( ...
- JAVA发送http GET/POST请求的两种方式+JAVA http 请求手动配置代理
java发送http get请求,有两种方式. 第一种用URLConnection: public static String get(String url) throws IOException { ...
- Java发送Http请求并获取状态码
通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...
- 编写爬虫(spider)的预备知识:用java发送HTTP请求
使用原生API来发送http请求,而不是使用apache的库,原因在于这个第三方库变化实在太快了,每个版本都有不小的变化.对于程序员来说,使用它反而会有很多麻烦,比如自己曾经写过的代码将无法复用. 原 ...
- 通过java发送http请求
通常的http请求都是由用户点击某个连接或者按钮来发起的,但是在一些后台的Java程序中需要发送一些get或这post请求,因为不涉及前台页面,该怎么办呢? 下面为大家提供一个Java发送http请求 ...
随机推荐
- imperva-代理安装
首先创建网关上面的监听端口
- SQl 跨服务器查询脚本示例
1.采用OPENDATASOURCE select top 10 *from OPENDATASOURCE('SQLOLEDB','Data Source=IP地址;User ID=连接用户名称;Pa ...
- mysql5.7.10 源码编译安装记录 (centos6.4)【转】
一.准备工作 1.1 卸载系统自带mysql 查看系统是否自带MySQL, 如果有就卸载了, 卸载方式有两种yum, rpm, 这里通过yum卸载 rpm -qa | grep mysql //查看系 ...
- Windows 10安装MongoDB(安装&启动)
Windows 10家庭中文版,MongoDB 3.6.3, 最近在学习Scrapy,可以却从未将scraped data存储到数据库中.在看过一些文档后,Scrapy会和MongoDB结合使用(还有 ...
- 数据库-mysql储存过程
存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行. 一:创建存储过程 MariaDB [test2]> delimiter // MariaDB [tes ...
- Win10搜索不能用
使用win10进行搜索时,一直显示win10特色的滚动条,但就是检索不出东西,我的主要是检索不到windows的内容: (个人感觉使用win10检索网页内容不太专业,就关闭了Web搜索) 最后有发现网 ...
- tensorflow中的boolean_mask
将mask中所有为true的抽取出来,放到一起,这里从n维降到1维度 tensor = [[1, 2], [3, 4], [5, 6]] import numpy as np mask=np.arra ...
- [转] Cacti+Nagios监控平台完美整合
Cacti+Nagios监控平台完美整合 http://os.51cto.com/art/201411/458006.htm 整合nagios+cacti+微信.飞信实现网络监控报警 http://b ...
- thinkphp模版常量替换机制
- MySQL学习笔记:regexp正则表达式
在MySQL中,模糊搜索的时候主要用两种方式: 1.like2.regexp + 正则表达式 性能优于like 正则表达式描述了一组字符串. 最简单的正则表达式是不含任何特殊字符的正则表达式.例如,正 ...