设为首页 收藏本站
查看: 454|回复: 0

[经验分享] 开发网页游戏过程记录6-自己实现apache httpclient

[复制链接]

尚未签到

发表于 2017-1-12 08:08:18 | 显示全部楼层 |阅读模式
  在之前的开发过程中需要用到httpclient的请求方法,虽然使用httpclient类中的相关方法可以实现基本请求的方法,可是还是觉得每次都要写一段固定的代码,方法中稍微有参数的改变就要重新实现一遍,限制了代码的扩展性。于是自己动手实现了一个模仿httpclient的工具类,此类不是很麻烦。具体代码如下:/*** 根据指定的 http 客户端对象和 请求方法,发送 http 请求并返回结果。* <p />* 如果请求失败,则返回 {@code null}。* * @param <T> {@code HttpMethod} 的实现。* @param client http 请求客户端。* @param method http 执行方法。* @param String charset 编码。* @return http 请求的结果。*/public static <T extends HttpMethod> String sendRequest(HttpClient client, T method, String charset) {if (StringUtils.isBlank(charset)) {charset = CharEncoding.UTF_8;}int status = 0;try {status = client.executeMethod(method);LOGGER.debug(String.format("http request url: %s, status: %s", method.getPath(), status));return IOUtils.toString(method.getResponseBodyAsStream(), charset);} catch (Exception ex) {LOGGER.error(String.format("http request url: %s, status: %s, error: %s", method.getPath(),status, ex.getMessage()));return null;}}/*** 发送指定 {@code url} 和参数的 http 请求,如果 {@code post == true},则发送 post 请求。* <p />* 请求失败,或发生错误时,返回 {@code null}。** @param url 要发送请求的 {@code URL}。* @param params {@code url} 的参数。* @param charset 请求响应的编码。* @param post 是否发送 {@code POST} 请求。* @return 请求的结果。*/public static String sendRequest(String url, Map<String, String> params, String charset, boolean post) {String noSchemeUrl = null;if (StringUtils.startsWith(url, "http://")) {noSchemeUrl = StringUtils.substring(url, 7);//将url去除协议部分以便后面获得host和path} else if (StringUtils.startsWith(url, "https://")) {noSchemeUrl = StringUtils.substring(url, 8);}int firstSlush = StringUtils.indexOf(noSchemeUrl, "/");//获得host和pathString host, path;if (firstSlush != -1) {host = noSchemeUrl.substring(0, firstSlush);path = noSchemeUrl.substring(firstSlush);} else {host = noSchemeUrl;path = "";}int colonIndex = StringUtils.indexOf(host, ":");//获得请求的端口号int port = 0;if (colonIndex != -1) {host = StringUtils.substring(host, 0, colonIndex);port = NumberUtils.toInt(StringUtils.substring(host, colonIndex), 80);}return sendRequest(host, port, path, params, charset, post);}/*** 发送 http 请求。** @param host 域名。* @param port 端口号。* @param path 路径。* @param params 参数。* @param charset 请求响应的编码。* @param post 是否发送 {@code POST} 请求。* @return 请求响应返回的结果。*/public static String sendRequest(String host, int port, String path, Map<String, String> params,String charset, boolean post) {HttpClient client = getHttpClient(host, port);HttpMethod httpMethod = null;if (post) {httpMethod = new PostMethod(path);} else {httpMethod = new GetMethod(path);}if (params != null && params.size() > 0) {List<NameValuePair> paramList = new LinkedList<NameValuePair>();for (String key : params.keySet()) {paramList.add(new NameValuePair(key, params.get(key)));//将请求参数设置到NameValuePair}httpMethod.setQueryString(paramList.toArray(new NameValuePair[paramList.size()]));}return sendRequest(client, httpMethod, charset);}/*** 根据指定的 {@code host} 和 端口号 {@code port},构造一个新的 {@code HttpClient}。** @param host 主机名(域名)。* @param port 端口号。* @return 返回指定 {@code host} 和 端口号 {@code port} 的 {@code HttpClient}。*/public static HttpClient getHttpClient(String host, int port) {HttpClient client = new HttpClient();client.getHostConfiguration().setHost(host, port);return client;}/*** 发送 {@code GET} 请求。** @param host 域名。* @param port 端口号。* @param path 路径。* @param params 参数。* @param charset 编码。* @return 请求的结果。*/public static String sendGetRequest(String host, int port, String path, Map<String, String> params,String charset) {return sendRequest(host, port, path, params, charset, false);}/*** 发送 {@code POST} 请求。** @param host 域名。* @param port 端口号。* @param path 路径。* @param params 参数。* @param charset 编码。* @return 请求的结果。*/public static String sendPostRequest(String host, int port, String path, Map<String, String> params,String charset) {return sendRequest(host, port, path, params, charset, true);}有了此封装类,就可以在代码中直接使用相应方法进行http请求了。


  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-327192-1-1.html 上篇帖子: omcat,Apache配置gzip压缩(HTTP压缩)功能 下篇帖子: Apache Common Configuration--超方便的配置文件读取解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表