java使用Jodd-http发送http请求

之前写过一篇关于java代码中使用restTemplate发送http请求的文章,那种方式比较复杂一点,现在使用jodd工具包来实现,相对来说简单多

首先在代码中引入jodd-http的依赖

  <!-- https://mvnrepository.com/artifact/org.jodd/jodd-http -->
        <dependency>
            <groupId>org.jodd</groupId>
            <artifactId>jodd-http</artifactId>
            <version>3.6.2</version>
        </dependency>

我其他地方(和http无关)还使用了jodd-core,所以也引入了,完整的pom依赖如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hf</groupId>
    <artifactId>moredev</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>moredev</name>
    <description>spring boot多环境配置</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <!--<scope>test</scope>-->
        </dependency>

        <dependency>
            <groupId>org.jodd</groupId>
            <artifactId>jodd-core</artifactId>
            <version>3.9.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.jodd/jodd-http -->
        <dependency>
            <groupId>org.jodd</groupId>
            <artifactId>jodd-http</artifactId>
            <version>3.6.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

编写工具类,实现get/post请求的发送

package com.hf.moredev.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;

import java.util.Map;

/**
 * @Description: http发送工具类,使用jodd来实现
 * @Date: 2019/2/23
 * @Auther: 
 */
@Slf4j
public class HttpUtil {
    private static final ObjectMapper mapper = new ObjectMapper();
    /**
     *  发送get请求
     * @param url
     * @param params 无参数传递null
     * @return
     */
    public  static String sendHttpGet(String url, Map<String,String> params) throws Exception {
        HttpRequest request = HttpRequest.get(url);
        if(!CollectionUtils.isEmpty(params)){
            request.query(params);
        }
        HttpResponse response = request.send();
        String bodyText = response.bodyText();
        bodyText = transFormToUtf8(bodyText);
        return bodyText;
    }

    /**
     *
     * @param url
     * @param params 发送json格式的参数  无参传递null
     * @return
     */
    public static String sendHttpPostJosn(String url, Map<String,Object> params){
        HttpRequest request = HttpRequest.post(url);
        request.contentType("application/json");
        request.charset("utf-8");
        if(!CollectionUtils.isEmpty(params)){
            try {
                request.body(mapper.writeValueAsString(params));
            } catch (JsonProcessingException e) {
                log.error("write paramter [" + params.toString() + "] to josn fail",e.getMessage(),e);
            }
        }
        HttpResponse response = request.send();
        return response.bodyText();
    }

    /**
     *
     * @param url
     * @param params 发送文本参数 无参传递null
     * @return
     */
    public static String sendHttpPost(String url, Map<String,Object> params){
        HttpRequest request = HttpRequest.post(url);
        if(!CollectionUtils.isEmpty(params)) {
            request.form(params);
        }
        HttpResponse response = request.send();
        return response.bodyText();
    }


    /**
     * 字符串转换为utf-8输出
     * @param source
     * @return
     */
    private static String transFormToUtf8(String source) throws Exception{
        return new String(source.getBytes(),"utf-8");
    }
}

测试类:

package com.hf.moredev.mytest;

import com.hf.moredev.utils.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

/**
 * @Description:
 * @Date: 2019/2/23
 * @Auther:
 */
@Slf4j
public class AnyTest {

     @Test
    public void converterTest(){
         String url = "http://www.weather.com.cn/data/cityinfo/101010100.html";
         String result = null;
         try {
             result = HttpUtil.sendHttpGet(url, null);
         } catch (Exception e) {
            log.error("查询失败....." + url,e.getMessage(),e);
         }
         System.out.println(result);
     }
}

执行就可以查询成功了!

文末转载一篇关于:  jodd-core中操作日期的一些api,很实用(简化了很多的日期操作,很便利)

https://blog.csdn.net/mbh12333/article/details/78329490

猜你喜欢

转载自blog.csdn.net/qq_42151769/article/details/87892285