码迷,mamicode.com
首页 > 其他好文 > 详细

httpclient用法。

时间:2014-08-12 12:46:34      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   os   io   

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。。。

httpclient可以帮助我们模仿http请求,我这里是在测试并发问题用到的,也是第一次接触httpclient觉得非常不错,也挺好用的容易上手。故在这里做一笔记,避免自己遗忘。下面就直接贴代码。。

我这里有个小例子:主要是提供给其他公司或者其他系统回调本系统的一个接口(http协议)。。。对于提供的http接口我们需要注意什么呢?最重要的一点就是:安全性不是所有人发过来的请求都是可以访问的,我这里是做了个简单的令牌验证来进行过滤。

先来说下这个简单的令牌验证原理吧,觉得还是有点用的。如有帮助大家也可以进行参考。

1:在http请求头里面加入参数如:httpPost.addHeader("auth_token", "silencily");后台是对这个参数进行一个MD5一个加密:(然后加密后的字符在加上固定字符,再进行一次加密保存数据库)。访问接口的时候进行一次验证。验证前台传入的跟数据库的是否一致,如果是一致的则进行接口的访问,如果不一致则返回请先注册接口。因为安全要求不是很高,所以令牌就先到这里。

2:httpclient模拟接口需要注意的问题,首先你url请求先绕过登陆验证。有些系统拦截.do请求进行登陆验证,有些是.action进行拦截,我这个系统就是只拦截.do请求,那么我不用LoginCtrl.do我直接使用LoginCtrl就行了(也算个小bug吧。)

下面我就直接贴出代码:只要是用StringEntity对象传参,前台传入json格式,后台SpringMVC直接把json转换成参数对应的实体对象。

(1)首先是前台httpclient请求。

@Test
    public void testSendMessages() {
        String result = null;
        HttpClient httpClient = new DefaultHttpClient();
        String url = "http://localhost:8080/minxinloan/service/delivery/messages";//messages.do因为有登录验证拦截.do请求,所以我这里就写messages绕过登录验证,不了就要提示请先登录。
        System.out.println("Invoking sms interface:" + url);
        HttpPost httpPost = new HttpPost(url);

        String json = "{ " +
                "    \"template_code\": \"T_ANON\", " +
                "    \"template\": \"祝你发财!\", " +
                "    \"phones\": [ " +
                "        \"13200233383\", " +
                "        \"13683324944\"" +
                "    ], " +
                "    \"argument\": [ ]" +
                "}";

        JSONObject jsonObject = JSONObject.fromObject(json);
        System.out.println(jsonObject.toString());
        try {
            httpPost.addHeader("auth_token", "silencily");
            httpPost.addHeader("consumer", "1/person2/2/dept2/192.86.2.3");
            StringEntity stringEntity = new StringEntity(jsonObject.toString(), "UTF-8");
            stringEntity.setContentType("application/json");
            httpPost.setEntity(stringEntity);
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            result = EntityUtils.toString(entity);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            httpClient.getConnectionManager().shutdown();
        }
        System.out.println("Result of Invoking sms interface:" + result);
    }

下面就是对前台传入的json字符串接受了(直接封装成一个对象。。)但前提是对象里面的属性需要跟json里面的如name:张三。对应起来。然后对象里面还可以定义其他对象,但是你json里面也需要这样对应。下面是代码

我这里MultiMessages对象就是对和json里面对应的。下面也会贴出来。

@ResponseBody
    @RequestMapping(value = "multi_messages", method = RequestMethod.POST)
    public MessageResult sendMultiMessages(@RequestHeader("auth_token") String authToken,
                                           @RequestHeader String consumer,
                                           @RequestBody MultiMessages multiMessages) {
        log.info("Handling multi_messages request.");
        MessageResult messageResult = new MessageResult();
        if (!authTokenValidator.validate(authToken)) {
            log.info("auth token is invalid.");
            messageResult.setStatus(MessageResult.STATUS_FAIL);
            messageResult.setCount("0");
            messageResult.setError("Invalid auth token.");
        } else {
            log.info("auth token is valid.");
            log.info("header ‘consumer‘ is :" + consumer);
            try {
                messageResult = openAPIService.sendMultiMessages(consumer, multiMessages);
                log.info("handle count:" + messageResult.getCount());
            } catch (OpenAPIException e) {
                log.error("handle multiMessages failed.", e);
                messageResult = e.generateResult();
            }
        }
        return messageResult;
    }

MultiMessages对象

/* 
 * CopyRright (c) 2013, Minxin and/or its affiliates. All rights reserved.
 */
package com.minxinloan.sms.handle.api.web.vo;

import java.util.List;

/**
 * 批量不同短信对象,对应json数据
 *
 * @author gejb
 * @since 14-7-24
 */
public class MultiMessages {
    private String template_code;
    private String template;
    private List<MultiMessagesData> data;

    public String getTemplate_code() {
        return template_code;
    }

    public void setTemplate_code(String template_code) {
        this.template_code = template_code;
    }

    public String getTemplate() {
        return template;
    }

    public void setTemplate(String template) {
        this.template = template;
    }

    public List<MultiMessagesData> getData() {
        return data;
    }

    public void setData(List<MultiMessagesData> data) {
        this.data = data;
    }

}

到这里,json参数就传入过来了。

目前httpclient先到这里,后续还会贴出来关于文件上传的是如何传入的。

不喜勿喷。

 

httpclient用法。,布布扣,bubuko.com

httpclient用法。

标签:style   blog   http   color   java   使用   os   io   

原文地址:http://www.cnblogs.com/puqiuxiaomao/p/3905327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!