文档章节

HttpURLConnection模拟Http操作 并自定义http请求

SuShine
 SuShine
发布于 2015/06/25 15:27
字数 651
阅读 11
收藏 0
点赞 0
评论 0
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class TestCustomHttp {
	// 255473522
	public static void main(String[] args) throws Exception {

		// customrequestget(
		// "https://api.douban.com/v2/note/user_created/52441987", null,
		// "GET");
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("title", "ghr更改tesdfsdsadasdasdasdfst");
		map.put("privacy", "");
		map.put("can_reply", "");
		map.put("content", "46546546546546dsfdsf54");
		customrequest("https://api.douban.com/v2/note/255650740", map, "PUT");

	}

	/**
	 * 自定义的http请求可以设置为DELETE PUT等而不是GET
	 * 
	 * @param url
	 * @param params
	 * @param method
	 * @throws IOException
	 */
	public static void customrequest(String url,
			HashMap<String, String> params, String method) throws IOException {
		// Post请求的url,与get不同的是不需要带参数
		URL postUrl = new URL(url);
		// 打开连接
		HttpURLConnection conn = (HttpURLConnection) postUrl.openConnection();
		// Output to the conn. Default is
		// false, set to true because post
		// method must write something to the
		// conn
		// 设置是否向connection输出,因为这个是post请求,参数要放在
		// http正文内,因此需要设为true
		conn.setDoOutput(true);
		// Read from the conn. Default is true.
		conn.setDoInput(true);
		conn.setConnectTimeout(5 * 1000);
		conn.setRequestProperty("Authorization",
				"Bearer 66dc31e3f85a34a0349495abe90e9de0");
		// Set the post method. Default is GET
		conn.setRequestMethod(method);
		// Post cannot use caches
		// Post 请求不能使用缓存
		conn.setUseCaches(false);
		// This method takes effects to
		// every instances of this class.
		// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
		// conn.setFollowRedirects(true);

		// This methods only
		// takes effacts to this
		// instance.
		// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
		conn.setInstanceFollowRedirects(true);
		// Set the content type to urlencoded,
		// because we will write
		// some URL-encoded content to the
		// conn. Settings above must be set before connect!
		// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
		// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
		// 进行编码

		conn.setRequestProperty("Content-Type",
				"application/x-www-form-urlencoded");

		// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
		// 要注意的是connection.getOutputStream会隐含的进行connect。
		conn.connect();
		OutputStream out = conn.getOutputStream();
		// The URL-encoded contend
		// 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
		StringBuilder sb = new StringBuilder();
		if (null != params) {
			int i = params.size();
			for (Map.Entry<String, String> entry : params.entrySet()) {
				if (i == 1) {
					sb.append(entry.getKey() + "=" + entry.getValue());
				} else {
					sb.append(entry.getKey() + "=" + entry.getValue() + "&");
				}

				i--;
			}
		}
		String content = sb.toString();
		System.out.print(content);
		// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
		out.write(content.getBytes("UTF-8"));
		out.flush();
		out.close(); // flush and close
		InputStream inStream = conn.getInputStream();
		String result = inputStream2String(inStream);
		System.out.println(result);
		conn.disconnect();
	}

	/**
	 * 豆瓣必须严格限制get请求所以增加这个方法 这个方法也可以自定义请求
	 * 
	 * @param url
	 * @param method
	 * @throws Exception
	 */

	public static void customrequestget(String url,
			HashMap<String, String> map, String method) throws Exception {
		if (null != map) {
			int i = 0;
			for (Map.Entry<String, String> entry : map.entrySet()) {

				if (i == 0) {
					url = url + "?" + entry.getKey() + "=" + entry.getValue();
				} else {
					url = url + "&" + entry.getKey() + "=" + entry.getValue();
				}

				i++;
			}
		}
		URL murl = new URL(url);
		System.out.print(url);
		HttpURLConnection conn = (HttpURLConnection) murl.openConnection();
		conn.setConnectTimeout(5 * 1000);
		conn.setRequestMethod(method);
		conn.setRequestProperty("Authorization",
				"Bearer 66dc31e3f85a34a0349495abe90e9de0");
		InputStream inStream = conn.getInputStream();

		String result = inputStream2String(inStream);
		System.out.println(result);
		conn.disconnect();
	}

	public static String inputStream2String(InputStream in) throws IOException {
		StringBuffer out = new StringBuffer();
		byte[] b = new byte[4096];
		for (int n; (n = in.read(b)) != -1;) {
			out.append(new String(b, 0, n));
		}
		return out.toString();
	}
}

本文转载自:http://blog.csdn.net/sfshine/article/details/8455819

共有 人打赏支持
SuShine
粉丝 119
博文 443
码字总数 98932
作品 0
青岛
后端工程师
求助,Java HttpUrlConnection POST请求!

怎么使用HttpUrlConnection 模拟一个POST去请求这个链接?求助啊,浏览器里面的请求是有的,但是我用java HttpUrlConnection 去请求这个链接确是440 网站地址:http://www.hacienda.go.cr/t...

snowfog
2017/02/10
207
3
URLConnection的连接、超时、关闭用法

Java中可以使用HttpURLConnection来请求WEB资源。 1、 URL请求的类别 分为二类,GET与POST请求。二者的区别在于: a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet...

玄空
2013/02/17
0
0
JDK中的URLConnection参数详解

针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题,是以FAQ的方式来解决的,而且比较零散,现在对这个类的使用就本人在项目中的使用经验做如下...

kanlianhui
2013/07/11
0
0
HttpURLConnection用法详解

针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题,是以FAQ的方式来解决的,而且比较零散,现在对这个类的使用就本人在项目中的使用经验做如下...

again-Y
2013/05/14
0
0
http://a.codekk.com/detail/Android/grumoon/Volley%

本文为 Android 开源项目源码解析 中 Volley 部分 项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo 分析者:grumoon,校对者:huxian99、Trinea,校对状态:完成 1. 功能介绍...

程序袁_绪龙
2015/12/17
50
0
Volley 源码解析

本文为 Android 开源项目源码解析 中 Volley 部分 项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo 分析者:grumoon,校对者:huxian99、Trinea,校对状态:完成 1. 功能介绍...

程序袁_绪龙
2015/12/17
95
1
android-async-http框架库使用基础

开源项目链接 android-async-http仓库:git clone https://github.com/loopj/android-async-http android-async-http主页:http://loopj.com/android-async-http/ 背景知识 开始使用分析前还......

xiahuawuyu
2015/12/22
76
0
Android网络编程之Http通信

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。 1. HttpURLConnection接口 首先需要明确的是,Http通信中的POST和GET请求方式的...

xiahuawuyu
2012/07/19
0
0
JDK中的URLConnection参数详解

针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题,是以FAQ的方式来解决的,而且比较零散,现在对这个类的使用就本人在项目中的使用经验做如下...

gaofeng36599
2017/07/14
0
0
android-类HttpURLConnection的使用

获取HttpURLConnection对象 URL url = new URL(url); URLConnection rulConnection = url.openConnection(); // 此处的urlConnection对象实际上是根据URL的 // 请求协议(此处是http)生成的U......

pointerException
2015/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
21分钟前
0
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
28分钟前
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
32分钟前
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
35分钟前
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
0
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
1
0
iptables规则备份和恢复、firewalld的9个zone以及操作和service的操作

保存以及备份iptalbes规则 设定了的防火墙规则要进行保存,否则系统重启后这些规则就没有了,使用命令 ”service iptables save ” 会把设定好的防火墙规则保存到文件/etc/sysconfig/iptabl...

黄昏残影
昨天
0
0
k8s image

k8s.gcr.io/kube-apiserver-amd64:v1.11.0k8s.gcr.io/kube-controller-manager-amd64:v1.11.0k8s.gcr.io/kube-scheduler-amd64:v1.11.0k8s.gcr.io/kube-proxy-amd64:v1.11.0k8s.gcr.......

分秒
昨天
0
0
数据结构--排序

这篇博客包含了数据结构中多种的排序算法: (1)简单选择:第一趟在A[0]~A[n-1]之间找到最小的,与A[0]进行交换,之后在A[1]~A[n-1]之间进行。。。第i趟在A[i-1]~A[n-1]之间找到最小的,最后...

wangxuwei
昨天
1
0
一名3年工作经验的java程序员应该具备的职业技能

一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪...

老道士
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部