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请求 ...
随机推荐
- discuz过滤词语无效
1.是由于一些特殊的字导致serialize序列化错误.过滤词语在表 common_word中,序列化房子common_syscache的censor中,看看是否有特殊符号.
- C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉
为了提高httpwebrequest的执行效率,查到了一些如下设置 request.ServicePoint.Expect100Continue = false; request.ServicePoi ...
- oracle一些笔记
1.字符串类型字段 区分大小写 where table_name = 'MIDDLE' 2.execute immediate '' bulk collect into v_xxx_tab 3.列别名 ...
- 20165203 学习基础和C语言基础调查
一.技能学习经验及体会 对于课外技能来说,我对很多领域都略知一二,但涉足不深,例如体育领域.摄影领域.绘画领域.书法领域等等,我所能拿得出手的就是体育领域的乒乓球了.娄老师的作业题目让我的思绪又回到了 ...
- hdu 1007 N个点中输出2点的最小距离的一半
分治法 Sample Input20 01 121 11 13-1.5 00 00 1.50 Sample Output0.710.000.75 # include <iostream> ...
- Azkaban(二)CentOS7.5安装Azkaban
1.软件介绍 Azkaban Web 服务器:azkaban-web-server-2.5.0.tar.gz Azkaban Excutor 执行服务器:azkaban-executor-server ...
- 【58沈剑架构系列】为什么说要搞定微服务架构,先搞定RPC框架?
第一章聊了[“为什么要进行服务化,服务化究竟解决什么问题”] 第二章聊了[“微服务的服务粒度选型”] 今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC ...
- Asp.net MVC4 +EF6开发的个人网站源码和介绍(仅供新手学习)
本项目是我去年利用业余时间开发的,采用的是asp.net mvc 4 +EF6+三层架构,适合新手进行学习,高手就没有什么价值了,可以直接跳过. 源码和数据库下载(已上传到git):https://g ...
- js的等值比较规则
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness ES2015中有四种 ...
- HTML Input 表单校验之datatype
凡要验证格式的元素均需绑定datatype属性,datatype可选值内置有10类,用来指定不同的验证格式. 如果还不能满足您的验证需求,可以传入自定义datatype,自定义datatype是一个非 ...