Java访问远程接口

Java 应用程序可以直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效、功能丰富的支持 HTTP 协议的客户端编程工具包。

.net包的HttpURLConnection

			URL u=new URL("http://t.weather.sojson.com/api/weather/city/101030100");
			//获取连接对象
			HttpURLConnection conn=(HttpURLConnection) u.openConnection();
			//连接
			conn.connect();
			//获取输入流
			InputStream in=conn.getInputStream();
			//读取输入流
			int r;
			byte[] bs=new byte[1024];
			StringBuffer sb=new StringBuffer();
			while((r=in.read(bs))!=-1) {
				sb.append(new String(bs, 0, r));
			}		
			in.close();
			System.out.println(sb.toString());

运行结果
获取到了天津的天气信息
在这里插入图片描述

HttpClient

HttpClient支持 HTTP 协议最新的版本和建议
实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
支持自动转向
支持 HTTPS 协议
支持代理服务器等

		String urlpath="http://www.ariko.cn:8080/BaseProjectSSM/test/t1";
		//相当于打开了一个浏览器
		CloseableHttpClient hc=HttpClients.createDefault();
		//一个get请求对象,包装的请求地址,相当于浏览器中输入了网址
		HttpGet get=new HttpGet(urlpath);
		//当客户端关闭请求的时候,通知服务端也关闭连接。
		get.setHeader("Connection","close");

		HttpResponse resp=null;
		HttpEntity entity=null;
		try {
			resp=hc.execute(get);	//回车了,得到了服务端响应的数据,
			entity=resp.getEntity();	//请求体,响应体对象
			String result=EntityUtils.toString(entity);
			System.out.println(result);
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {  //关闭连接
				if(entity!=null)EntityUtils.consume(entity);
				if(get!=null)get.abort();
				if(hc!=null)hc.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}	

运行结果

这个接口是我的网站上开的一个测试接口,就返回一段字符串。
Java访问远程接口_第1张图片

编码问题

若遇到乱码,可使用EntityUtils进行字符转换处理。

String result=new String(EntityUtils.toByteArray(entity),"UTF-8");

判断返回码

如果换回码==200再读取返回数据

			if(resp.getStatusLine().getStatusCode()==200) {
				entity=resp.getEntity();
			}

设置请求时间

为了防止等待过长,可以设置超时时间

		RequestConfig config = RequestConfig.custom()
				.setConnectTimeout(5000)  //设置连接超时时间
				.setConnectionRequestTimeout(1000) //设置请求超时时间
				.setSocketTimeout(5000) //读取超时时间
				.build();
		//设置到此次get请求
		get.setConfig(config);	

模拟post

和get方式差不多 就多个设置请求体的参数

		//以上同get方式
		HttpPost post=new HttpPost(urlpath);	//新建一个post请求
		List<BasicNameValuePair> params=new ArrayList<>();	//参数集合
		params.add(new BasicNameValuePair("参数名", "参数值"));		//装填参数
		HttpEntity entity=new UrlEncodedFormEntity(params, "UTF-8");	//实例化请求体
		post.setEntity(entity);	//请求体添加到post
		//以下同get方式

所谓远程接口访问,其实就是访问网络资源。

如果把接口的URL,换成网址的URL

		String urlpath="http://www.ariko.cn:8080/BaseProjectSSM";

出来就是一个html文件
Java访问远程接口_第2张图片

你可能感兴趣的:(Java)