如何用JAVA收发HTTP请求

        首先需要明确的一点是,不管是磁盘还是网络传输,最小的存储单元都是字节,所以 I/O 操作的都是字节而不是字符       

        当我们需要用java发送http请求的时候,通常会用apache的commons-httpclient包。只要新建一个HttpClient,设置编码,设定超时时间,传入url执行GetMethod或者PostMethod方式进行发送就能返回一个byte数组。然后根据需要,将返回的字节流转换成字符串或者文件。

        这个本质上跟从浏览器发起请求是一样的,服务端的处理没有差异。一般服务端在返回的时候会调用HttpServletResponse对象的setContentType方法进行设置,用于说明返回字节流的类型,这样浏览器接收到返回信息就能知道这个时候是该给用户展示一个字符串还是一张网页还是提示用户下载保存文件。

       以下是java客户端收发http请求的代码:

package test.IO;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class TestHttpIO {
	private static String url = "*********";
	private static String filePath = "*********";
	private static final String CONTENT_CHARSET = "UTF-8";

	public void writeFileFromUrl() {
		byte[] responce = getUrl(url);
		// 如果网络返回的是字符串
		String str = new String(responce);// 注意,一般情况下这边需要指定编码格式,不指定的话会使用系统默认的编码格式
		BufferedWriter bw;
		try {
			bw = new BufferedWriter(new FileWriter(filePath));
			bw.write(str);
			bw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 如果网络返回是文件
		OutputStream os;
		try {
			os = new FileOutputStream(new File(filePath));
			os.write(responce);
			os.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static byte[] getUrl(String url) {
		HttpClient client = new HttpClient();
		client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,
				CONTENT_CHARSET);
		client.setTimeout(10000);
		GetMethod method = new GetMethod(url);
		try {
			int statusCode = client.executeMethod(method);
			if (statusCode != HttpStatus.SC_OK) {
				throw new RuntimeException("服务器响应错误[" + statusCode + "]");
			}
			byte[] responseBody = null;
			responseBody = method.getResponseBody();
			return responseBody;
		} catch (HttpException e) {
			throw new RuntimeException(e);
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			method.releaseConnection();
			client.getHttpConnectionManager().closeIdleConnections(0);
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值