`

WebClient发送请求公共方法

阅读更多
import java.util.Map;

import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.util.CollectionUtils;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.WebClient.RequestBodySpec;
import reactor.core.publisher.Mono;

import javax.net.ssl.SSLException;

public class MyWebClitntUtil {
    private static final MediaType MEDIATYPE = MediaType.APPLICATION_JSON_UTF8;

    /**
     *
     * @param paramter
     *            请求参数
     * @param url
     *            请求路径
     * @param resultType
     *            返回结果类型
     * @return
     */
    public static <V> V post(Object paramter, String url, Class<V> resultType) {

        return post(uri(url, HttpMethod.POST), paramter, resultType);
    }

    /**
     *
     * @param paramter
     *            请求参数
     * @param url
     *            请求路径
     * @param header
     *            请求头
     * @param resultType
     *            返回结果类型
     * @return
     */
    public static <V> V post(Object paramter, String url, Map<String, String> header, Class<V> resultType) {

        RequestBodySpec uri = uri(url, HttpMethod.POST);
        addHeader(header, uri);
        return post(uri, paramter, resultType);
    }

    private static <V> V post(RequestBodySpec uri, Object paramter, Class<V> resultType) {

        return uri.contentType(MEDIATYPE).body(Mono.just(paramter), Object.class).retrieve().bodyToMono(resultType)
                .block();
    }

    /**
     *
     * @param url
     *            请求路径
     * @param resultType
     *            返回结果类型
     * @return
     */
    public static <V> V get(String url, Class<V> resultType) {

        return uri(url, HttpMethod.GET).retrieve().bodyToMono(resultType).block();
    }

    /**
     *
     * @param url
     *            请求路径
     * @param header
     *            请求头
     * @param resultType
     *            返回结果类型
     * @return
     */
    public static <V> V get(String url, Map<String, String> header, Class<V> resultType) {

        RequestBodySpec uri = uri(url, HttpMethod.GET);
        addHeader(header, uri);
        return uri.retrieve().bodyToMono(resultType).block();
    }

    private static RequestBodySpec uri(String url, HttpMethod method) {

        return createWebClient().method(method).uri(url);
    }

    private static void addHeader(Map<String, String> header, RequestBodySpec uri) {

        if (!CollectionUtils.isEmpty(header)) {
            header.forEach((name, value) -> uri.header(name, value));
        }
    }

    public static WebClient createWebClient()  {//已绕开https证书认证
        SslContext sslContext = null;
        try {
            sslContext = SslContextBuilder
                    .forClient()
                    .trustManager(InsecureTrustManagerFactory.INSTANCE)
                    .build();
        } catch (SSLException e) {
            e.printStackTrace();
        }

        SslContext finalSslContext = sslContext;
        ClientHttpConnector httpConnector = new ReactorClientHttpConnector(opt -> {
            opt.sslContext(finalSslContext);
        });
        return WebClient.builder().clientConnector(httpConnector).build();
    }
}

依赖:
compile('org.springframework:spring-webflux')
compile('io.projectreactor.ipc:reactor-netty')

 

分享到:
评论

相关推荐

    C#中在WebClient中使用post发送数据实现方法

    很多时候,我们需要使用C#中的WebClient 来收发数据,WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法。本文就较为详细的说明了WebClient中使用post...

    给予javaWeb-httpclient请求https实例demo

    本文将深入探讨如何使用HTTPClient库来发送HTTPS请求,以及涉及到的证书管理相关知识。 首先,理解HTTPS协议是至关重要的。HTTPS(HyperText Transfer Protocol Secure)是一种基于SSL/TLS的安全通信协议,它在HTTP...

    C#实现IIS服务器下载文件

    其中WebClient类处于System.Net名字空间中,该类的主要功能是提供向URI标识的资源发送数据和从URI标识的资源接收数据的公共方法。我们利用其中的DownloadFile()方法将网络文件下载到本地。然后用FileStream类的...

    使用C#创建webservice及三种调用方式.pdf

    - WebClient类在.NET框架中用于以简单的方式发送HTTP请求和接收HTTP响应。通过WebClient可以方便地向指定的URL发送SOAP消息,并接收Web服务的响应。 - 示例代码展示了如何构建一个WebClient对象,配置必要的信息,...

    论文研究-ASP.NET中页面之间值的传递方法的研究.pdf

    POST方法通常用于提交表单,将数据发送到服务器处理,而GET方法是从服务器检索信息。在***中,可以使用Response.Redirect()或Server.Transfer()方法配合POST和GET来实现页面跳转,并携带必要的数据。例如,使用POST...

    webservice

    在ASP.NET中,创建WebService通常涉及到创建一个`.asmx`文件,该文件包含了服务的公共方法。这些方法会被编译成ASMX Web服务,可以通过WSDL(Web Services Description Language)文件来描述其接口,供其他系统发现...

    ASP.NET Webservice示例代码

    通过指定Web Service的URL和方法名,可以发送请求并接收响应。 - 注意點.rtf可能是关于如何使用Web Service或理解示例代码的文档,而`note.txt`可能包含开发者留下的注释或提示信息。 3. **技术要点**: - **SOAP...

    csharpgetip

    这段代码通过WebClient类的DownloadString方法向`checkip.dyndns.org`发送一个HTTP GET请求,然后从返回的HTML内容中解析出IP地址。这种方法适用于大多数家庭和小型企业网络环境,因为它们通常只有一个公网IP地址。 ...

    一个WCF应用的完整演示

    在WCFWebClient项目中,可能展示了如何使用`System.Net.WebClient`类来访问WCF服务,通过`DownloadData`或`DownloadString`等方法发送请求并接收响应。 5. **Tcp客户端**: WCFTCPClient可能展示了如何直接使用TCP...

    SQL Server调用Webservice示例

    - 存储过程源代码,展示如何使用`System.Web.Services`命名空间的`WebClient`或`SoapHttpClientProtocol`类来发送请求和接收响应。 - 示例Web Service的接口定义,帮助理解如何与特定服务进行交互。 - 数据库表...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    asp.net 使用web sevice实现天气预报源代码

    1. 定义服务接口:在 .asmx 文件中,声明一个公共方法,如 `GetWeatherForecast(string city)`,用于接收城市名并返回天气信息。 2. 服务实现:在后台代码中,实现该方法,调用 API 获取天气数据,然后将数据转换为...

    将Exchange 2003与Webdav一起使用(发送,检索,附件,联系人,邮箱大小,标记为已读)

    使用WebDAV,可以通过创建一个新的XML文档来构造邮件,然后使用WebClient的UploadData方法将数据发送到Exchange服务器的WebDAV端点。记得设置适当的HTTP头,如Content-Type和Authorization,以确保请求能正确被...

    某公司C#程序员面试题笔试题.pdf,这是一份不错的文件

    11. **向服务器发送请求**:常见的方法有HTTP的GET和POST请求,还可以使用WebClient、HttpWebRequest、HttpClient等类进行异步或同步请求。 12. **DataReader与DataSet的区别**:DataReader是只读、向前的数据流,...

    北大青鸟5.0 S2复习题

    10. Ping类:属于System.Net.NetworkInformation命名空间,用于发送ICMP回显请求,检测网络连接。 11. 属性(Property):在C#中,属性是类的成员,用于封装字段,可以有get和set访问器,控制字段的读写。属性可以...

    基于web服务的QQ在线检测

    在C#代码中,我们需要创建一个类,并使用`[WebService]`属性标记它,然后定义公共方法,这些方法将暴露为Web服务的操作。例如,我们可以有一个名为`CheckQQOnline`的方法,接受一个QQ号码作为参数,返回一个布尔值...

    基于.net环境的WebService开发资料

    ASMX文件包含一个或多个公共方法,这些方法可以通过HTTP请求暴露为Web服务操作。 - .NET Framework提供了System.Web.Services命名空间,其中包含创建和消费WebService所需的所有类和接口,如WebService类和...

    C#网页自动登录源码

    8. **源码结构**:C#自动登录源码通常包含以下几个部分:URL定义、HTML解析、POST数据构造、发送请求、处理响应(包括检查登录是否成功,管理Cookie)。 9. **错误处理**:源码应包含适当的错误处理机制,例如网络...

    动态引用WebService

    - 实例化生成的代理类后,可以通过代理类的公共方法调用Web服务的操作。这些方法会封装SOAP请求并发送到Web服务的URL,然后接收并处理响应。 6. **处理异步调用** - 在生成客户端代理类时,如果启用了`...

    .net面试题的封顶

    - ASMX Web Service:使用HttpClient或WebClient类发送HTTP请求,解析返回的XML或SOAP响应。 - WCF(Windows Communication Foundation):支持多种协议和服务样式,如SOAP、RESTful。 - SOAP UI:测试工具,可...

Global site tag (gtag.js) - Google Analytics