1:因为要读取接口得数据,而接口又没有timeout超时,导致程序卡死,只能在本地程序设置timeout了
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.apache.log4j.Logger; public class HttpUrlUtil { private static Logger logger = Logger.getLogger(HttpUrlUtil.class); public int timeOut = 5 * 1000; public static String ENCODING = "UTF-8"; private static String getResponseStr(HttpURLConnection connection) throws IOException { StringBuffer result = new StringBuffer(); int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in, ENCODING)); String inputLine = ""; while ((inputLine = reader.readLine()) != null) { result.append(inputLine); } } return String.valueOf(result); } public String getContent(String urlStr) { try { URL url = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); String longUrl = "user=a"; connection.getOutputStream().write(longUrl.getBytes());//传参 connection.setConnectTimeout(timeOut); //连接超时 connection.setReadTimeout(timeOut); //返回超时 connection.connect(); //打开链接 String responseStr = getResponseStr(connection); return responseStr; } catch (Exception e) { logger.error(String.format("get rcms api error : %s", urlStr), e); } return null; } }
封装数据
String content = httpUrlUtill.getContent(apiPath); ArrayList<Channel> result = jsonObjectMapper.readValue(content, new TypeReference<ArrayList<Channel>>() { });
别外一个还不错的客户端
package com.chinacache.bandwidthmonitor.utils; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.params.CoreProtocolPNames; import org.apache.http.params.HttpParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; /** * HTTP提交的工具类,用于以HTTP方式从外部获取数据。 * * @author qida.wu */ public class HttpUtil { private static final Log log = LogFactory.getLog(HttpUtil.class); private final int TIMEOUT = 300000; private final String CHARSET = HTTP.UTF_8; private HttpClient httpClient; /** * 单例模式,HttpClient全局只需要一个 TODO: HttpClient应该配置成Spring * Bean,可是HttpParams没有提供构造方法或setXxx()方法能够直接在配置文件中配置所需参数 * * @return HttpClient */ private HttpClient getHttpClient() { HttpParams params = new BasicHttpParams(); params.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, CHARSET); params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, TIMEOUT); params.setParameter(CoreConnectionPNames.SO_TIMEOUT, TIMEOUT); httpClient = new DefaultHttpClient(params); return httpClient; } /** * 简化的get请求接口 * * @param url * 请求地址 * @return 响应内容 */ public String request(final String url) { return request(url, null, false); } /** * 发送一个 HTTP Request * * @param url * 请求地址 * @param urlVariables * 请求的参数,为 null 或者长度为0表示没有参数 * @param isPost * true表示使用 POST,false表示使用 GET * @return 响应内容 */ public String request(String url, Map<String, String> urlVariables, boolean isPost) { HttpResponse response = request2(url, urlVariables, isPost); String responseBody = ""; try { HttpEntity entity = response.getEntity(); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { responseBody = EntityUtils.toString(entity, CHARSET); } else { EntityUtils.consume(entity); } } catch (IOException e) { log.error(e.getMessage(), e); } return responseBody; } /** * 发送一个 HTTP Request * * @param url * 请求地址 * @param urlVariables * 请求的参数,为 null 或者长度为0表示没有参数 * @param isPost * true表示使用 POST,false表示使用 GET * @return 响应内容,有异常则返回null */ public InputStream requestGetStream(String url, Map<String, String> urlVariables, boolean isPost) { HttpResponse response = request2(url, urlVariables, isPost); try { return response.getEntity().getContent(); } catch (Exception e) { log.error(e.getMessage(), e); } return null; } public HttpResponse request2(String url, Map<String, String> urlVariables, boolean isPost) { List<NameValuePair> nameValuePairs = parseToNameValuePair(urlVariables); HttpUriRequest request = getHttpRequest(url, nameValuePairs, isPost); HttpResponse response = null; try { log.debug(request.getRequestLine()); response = getHttpClient().execute(request); log.debug(response.getStatusLine()); } catch (Exception e) { log.error(e.getMessage(), e); } return response; } /** * 封装HTTP Request,并对参数做url-encode */ private HttpUriRequest getHttpRequest(String url, List<NameValuePair> nameValuePairs, boolean isPost) { HttpUriRequest request; if (isPost) { request = new HttpPost(url); if (CollectionUtils.isNotEmpty(nameValuePairs)) { try { ((HttpPost) request).setEntity(new UrlEncodedFormEntity( nameValuePairs, CHARSET)); } catch (UnsupportedEncodingException e) { log.error(e.getMessage(), e); } } } else { if (CollectionUtils.isNotEmpty(nameValuePairs)) { url += "?" + URLEncodedUtils.format(nameValuePairs, CHARSET); } request = new HttpGet(url); } return request; } /** * 将Map转换为NameValuePair列表 */ private List<NameValuePair> parseToNameValuePair( Map<String, String> urlVariables) { List<NameValuePair> params = new ArrayList<NameValuePair>(); if (urlVariables != null) { for (String key : urlVariables.keySet()) { params.add(new BasicNameValuePair(key, urlVariables.get(key))); } } return params; } }
2:转 百度短链接服务
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ShortUrlUtil { private static Logger logger = LoggerFactory.getLogger(ShortUrlUtil.class); public static int TIMEOUT = 30 * 1000; public static String ENCODING = "UTF-8"; /** * JSON * get value by key * @param replyText * @param key * @return */ private static String getValueByKey_JSON(String replyText, String key){ ObjectMapper mapper = new ObjectMapper(); JsonNode node; String tinyUrl = null; try { node = mapper.readTree(replyText); tinyUrl = node.get(key).asText(); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return tinyUrl; } /** * 通过HttpConnection 获取返回的字符串 * @param connection * @return * @throws IOException */ private static String getResponseStr(HttpURLConnection connection) throws IOException{ StringBuffer result = new StringBuffer(); int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(in, ENCODING)); String inputLine = ""; while ((inputLine = reader.readLine()) != null) { result.append(inputLine); } } return String.valueOf(result); } /**‘ * 百度短链接接口 无法处理不知名网站,会安全识别报错 * @param args */ public static void main(String[] args) { try{ URL url = new URL("http://dwz.cn/create.php"); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //POST Request Define: connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setConnectTimeout(TIMEOUT); connection.setRequestMethod("POST"); String longUrl = "url=www.sina.com"; connection.getOutputStream().write(longUrl.getBytes()); connection.connect(); String responseStr = getResponseStr(connection); System.out.println("response string: " + responseStr); String tinyUrl = getValueByKey_JSON(responseStr, "tinyurl"); System.out.println("tinyurl: " + tinyUrl); }catch(IOException e){ e.printStackTrace(); } } }
3:转 网易短链接
相关推荐
在给定的代码片段中,展示了如何使用`HttpURLConnection`进行文件下载。 首先,我们看到代码引入了`java.io`、`java.net`和`java.util`这三个包。`java.io`包含了输入/输出流,用于处理数据的读写;`java.net`包含...
JAVA通过HttpURLConnection上传和下载文件的方法 JAVA通过HttpURLConnection上传和下载文件的方法是非常有实用价值的,需要的朋友可以参考下。HttpURLConnection是一个Java类,用于从网络中读取数据或向网络中写入...
本示例重点讲解如何利用Java内置的HttpURLConnection类来完成这个任务。HttpURLConnection是Java标准库提供的一种轻量级的HTTP客户端接口,适用于简单的HTTP通信场景。 首先,我们来看一下上传文件的基本流程: 1....
在Java编程环境中,当需要与Web服务器交互,例如上传文件时,`HttpURLConnection`是一个常见的选择,因为它提供了灵活且高效的方式。本篇文章将详细讲解如何使用`HttpURLConnection`实现文件上传,同时涉及到服务器...
import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import java.util.Map; public class HttpTest { private HttpURLConnection hc = ...
本例子是关于如何将`AsyncTask`与`HttpURLConnection`结合,实现一个简单的网络请求。 `AsyncTask`是Android提供的轻量级异步任务框架,它允许开发者在后台线程执行耗时操作,并在主线程更新UI。`AsyncTask`包含三...
本篇文章将深入讲解如何使用`HttpURLConnection`类来模拟浏览器请求,并通过实例展示其在接口调用中的应用。 首先,`HttpURLConnection`是`java.net.URLConnection`的一个子类,用于处理HTTP协议。在使用`...
本知识点将深入探讨如何使用`HttpURLConnection`与Servlet协同工作,处理多文件参数以及实现断点上传功能。 首先,`HttpURLConnection`是Java API中的一个核心类,它负责提供HTTP协议的连接功能。相比Apache ...
本文将详细介绍如何使用`HttpURLConnection`和`HttpClient`这两种方式来实现这一目标。 首先,让我们从`HttpURLConnection`开始。`HttpURLConnection`是Java内置的HTTP客户端,它简单且易于使用,适用于轻量级的...
HttpURLConnection是Java标准库提供的一种网络连接接口,适用于Android系统,它提供了更高效、更灵活的网络通信方式。本文将详细介绍如何利用HttpURLConnection实现Android应用中的断点续传功能。 首先,理解断点续...
本话题主要关注如何使用`HttpURLConnection`来实现从本地目录读取资源并上传到远程服务器的功能。 首先,`HttpURLConnection`是`java.net.URL`类的子类,它可以建立与指定URL所代表的服务器的连接,并执行HTTP协议...
在这个主题中,我们将深入探讨HttpURLConnection的基本操作及其在实际应用中的使用。 首先,了解HttpURLConnection的基本结构是非常重要的。它继承自URLConnection类,提供了对HTTP协议的支持。通过URL对象的open...
在本例中,我们将探讨如何使用`HttpURLConnection`来下载图片,这是一个基础但实用的网络编程任务。下面我们将详细介绍这个过程,并涉及到的相关知识点。 1. **HttpURLConnection简介**: `HttpURLConnection`是`...
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); // 设置请求体,比如username=foo&password=bar // 发送请求,读取响应,获取Set-Cookie头 ``` ...
这个"android HttpURLConnection上传图片demo"提供了一个具体的示例,教我们如何使用HttpURLConnection来完成这一任务。HttpURLConnection是Java标准库中的一个类,它允许Android应用程序与HTTP服务器进行通信,执行...
正文:我在使用HttpURLConnection.getResponseCode()的时候直接报错是IOException错误,responseCode = -1。一直想不明白,同一个程序我调用了两次,结果有一个链接一直OK,另一个却一直报这个错误。后来发现两个...
本篇文章将深入探讨HttpURLConnection的使用方法、特性以及一些关键的示例代码。 一、HttpURLConnection简介 HttpURLConnection继承自URLConnection,它提供了对HTTP协议的直接支持。相比于HttpClient,...
在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要理解HTTP请求的基本结构。HTTP请求通常由以下几个部分组成:请求行、请求头、空行和请求体。在文件...
常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **HttpURLConnection** HttpURLConnection是Java标准库提供的类,自Android 2.3(API级别9...
HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();// 取得连接 conn.connect(); InputStream is = conn.getInputStream();//取得返回的InputStream bitmap = BitmapFactory....