一个手写的 http client

public class HTTPClient {

	public static final String GET = "GET";
	public static final String POST = "POST";
	public static final String PUT = "PUT";
	public static final String DELETE = "DELETE";

	public static String getData(String path) throws Exception {
		String responseData = visitWithoutParam(path, GET);
		return responseData;
	}

	public static String postData(String path, String data) throws Exception {
		String responseData = visitWithParam(path, POST, data);
		return responseData;
	}

	public static String putData(String path, String data) throws Exception {
		return "To do put data";
	}

	public static String deleteData(String path) throws Exception {
		return "To do delete data";
	}

	public static String visitWithParam(String path, String method, String body) throws Exception{
		InputStream inputStream = null;
		BufferedReader bufferedReader = null;

		try {
			URL url = new URL(path);
			HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
			httpURLConnection.setDoInput(true);
			httpURLConnection.setDoOutput(true);
			httpURLConnection.setUseCaches(false);

			httpURLConnection.setRequestMethod(method);
			httpURLConnection.setRequestProperty("Content-Type", "application/json");
			httpURLConnection.setRequestProperty("charset", "utf-8");
			httpURLConnection.setRequestProperty("Content-Length", Integer.toString(body.getBytes().length));

			DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream());
			dataOutputStream.writeBytes(body);
			dataOutputStream.flush();
			dataOutputStream.close();

			inputStream = httpURLConnection.getInputStream();
			bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
			StringBuilder stringBuilder = new StringBuilder();
			String line = null;

			while((line = bufferedReader.readLine()) != null)
				stringBuilder.append(line);

			return stringBuilder.toString();
		} catch (Exception e) {
			throw new Exception(e);
		} finally {
			// no need to change null actually
			try {
				if(bufferedReader != null) bufferedReader.close();
				if(inputStream != null) inputStream.close();
			} catch (Exception e){

			}
		}
	}

	public static String visitWithoutParam(String path, String method) throws Exception {
		InputStream inputStream = null;
		BufferedReader bufferedReader = null;

		URL url;
		try {
			url = new URL(path);
			HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
			httpURLConnection.setDoInput(true);
			httpURLConnection.setUseCaches(false);

			httpURLConnection.setRequestMethod(method);

			inputStream = httpURLConnection.getInputStream();
			bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

			StringBuilder stringBuilder = new StringBuilder();
			String line = null;

			while((line = bufferedReader.readLine()) != null)
				stringBuilder.append(line);

			return stringBuilder.toString();
		} catch (Exception e) {
			throw new Exception(e);
		} finally {
			try {
				if(bufferedReader != null) bufferedReader.close();
				if(inputStream != null) inputStream.close();
			} catch (Exception e) {

			}
		}

	}
}

自己很久以前写过的一段代码,当时忘记了 apache.httpclient 这个东西,结果又重新造了个轮子  

时间: 2024-11-07 15:06:05

一个手写的 http client的相关文章

最新用WPF为触摸屏写了一个手写程序,双格输入的

原文:最新用WPF为触摸屏写了一个手写程序,双格输入的 双格输入可以提高手写速度,当前字写完以后可以自动识别提交,写下一个字.这样比单格手写速度提高一倍.特别适合触摸屏程序使用 界面如下: 程序如下: 点击打开链接 ? 原文地址:https://www.cnblogs.com/lonelyxmas/p/9688762.html

logistic回归与手写识别例子的实现

本文主要介绍logistic回归相关知识点和一个手写识别的例子实现 一.logistic回归介绍: logistic回归算法很简单,这里简单介绍一下: 1.和线性回归做一个简单的对比 下图就是一个简单的线性回归实例,简单一点就是一个线性方程表示 (就是用来描述自变量和因变量已经偏差的方程) 2.logistic回归 可以看到下图,很难找到一条线性方程能将他们很好的分开.这里也需要用到logistic回归来处理了. logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,

KNN分类算法实现手写数字识别

需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ?数据维度比较大,样本数比较多. ? 数据集包括数字0-9的手写体. ?每个数字大约有200个样本. ?每个样本保持在一个txt文件中. ?手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下: 数据集压缩包解压后有两个目录:(将这两个目录文件夹拷贝的项目路径下E:/KNNCase/digits/) ?目录trainingD

MNIST手写数字数据库

手写数字库很容易建立,但是总会很浪费时间.Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun建有一个手写数字数据库,训练库有60,000张手写数字图像,测试库有10,000张. 请访问原站 http://yann.lecun.com/exdb/mnist/ 该数据库在一个文件中包含了所有图像,使用起来有所不便.如果我把每个图像分别保存,成了图像各自独立的数据库. 并在Google Code中托管. 如果你有需要,欢迎在此下载: http://yann.le

机器学习与数据挖掘-logistic回归及手写识别实例的实现

本文主要介绍logistic回归相关知识点和一个手写识别的例子实现 一.logistic回归介绍: logistic回归算法很简单,这里简单介绍一下: 1.和线性回归做一个简单的对比 下图就是一个简单的线性回归实例,简单一点就是一个线性方程表示 (就是用来描述自变量和因变量已经偏差的方程) 2.logistic回归 可以看到下图,很难找到一条线性方程能将他们很好的分开.这里也需要用到logistic回归来处理了. logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,

【OpenCV】opencv3.0中的SVM训练 mnist 手写字体识别

前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的ml包含了很多的ML框架接口,就试试了. 详细的OpenCV文档:http://docs.opencv.org/3.0-beta/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html mnist数据下载:http://yann.l

Python scikit-learn 学习笔记—手写数字识别

这是一个手写数字的识别实验,是一个sklearn在现实中使用的案例.原例网址里有相应的说明和代码. 首先实验的数据量为1797,保存在sklearn的dataset里.我们可以直接从中获取.每一个数据是有image,target两部分组成.Image是一个尺寸为8*8图像,target是图像的类别,在我们看来类别就是手写的数字0-9. 代码一开始,将数据载入. <span style="font-family:Microsoft YaHei;"># Standard sci

手写数组去重

//本来以为挺简单,还是天真,考虑,NaN,{}. 1:arr.splice(i+1,1);//表示插入删除元素,表示删除i+1个元素,1表示删除一个 //手写数组去重                          var arr = [1,2,3,3]; //排序的数组 arr.sort();//排序好了就不写了                          for(var i=0;i<arr.length-1;i++)                          {      

手写一个模块化的 TCP 服务端客户端

前面的博客 基于 socket 手写一个 TCP 服务端及客户端 写过一个简单的 TCP 服务端客户端,没有对代码结构进行任何设计,仅仅是实现了相关功能,用于加深对 socket 编程的认识. 这次我们对整个代码结构进行一下优化,使其模块化,易扩展,成为一个简单意义上的“框架”. 对于 Socket 编程这类所需知识偏底层的情况(OS 协议栈的运作机制,TCP 协议的理解,多线程的理解,BIO/NIO 的理解,阻塞函数的运作原理甚至是更底层处理器的中断.网卡等外设与内核的交互.核心态与内核态的切