iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java webservice的POST和GET请求调用方式
  • 714
分享到

Java webservice的POST和GET请求调用方式

2024-04-02 19:04:59 714人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录WEBservice的POST和GET请求调用POST请求1.发送请求2.POST请求体3.测试GET请求通过webService调第三方提供的接口post与getPOSTGET

webservice的POST和GET请求调用

POST请求

1.发送请求

import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import com.Google.common.io.ByteStreams;

public static String sendHttpPost(String wsdl, String xml) throws Exception{
    int timeout = 10000;
    // HttpClient发送SOAP请求
    System.out.println("HttpClient 发送SOAP请求");
    HttpClient client = new HttpClient();
    PostMethod postMethod = new PostMethod(wsdl);
    // 设置连接超时
    client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);
    // 设置读取时间超时
    client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
    // 然后把Soap请求数据添加到PostMethod中
    RequestEntity requestEntity = new StringRequestEntity(xml, "text/xml", "UTF-8");
    // 设置请求体
    postMethod.setRequestEntity(requestEntity);
    int status = client.executeMethod(postMethod);
    // 打印请求状态码
    System.out.println("status:" + status);
    // 获取响应体输入流
    InputStream is = postMethod.getResponseBodyAsStream();
    // 获取请求结果字符串
    return new String(ByteStreams.toByteArray(is));
}

public static String sendURLConnection(String wsdl, String xml) throws Exception{
    int timeout = 10000;
    // HttpURLConnection 发送SOAP请求
    System.out.println("HttpURLConnection 发送SOAP请求");
    URL url = new URL(wsdl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    conn.setRequestMethod("POST");
    conn.setUseCaches(false);
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setConnectTimeout(timeout);
    conn.setReadTimeout(timeout);
    DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
    dos.write(xml.getBytes("utf-8"));
    dos.flush();
    InputStream inputStream = conn.getInputStream();
    // 获取请求结果字符串
    return new String(ByteStreams.toByteArray(inputStream));
}

ByteStreams的Maven

<dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>27.0.1-jre</version>
    </dependency>

2.POST请求体


public static String getXml(Map<String ,String> map , String methodName){
    StringBuffer sb = new StringBuffer("");
    sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    sb.append("<soap:Envelope "
            + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
            + "xmlns:xsd='http://www.w3.org/2001/XMLSchema' "
            + "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>");
    sb.append("<soap:Body>");
    sb.append("<" + methodName + " xmlns='http://tempuri.org/'>");
    //post参数
    for (String str : map.keySet()){
        sb.append("<"+str+">"+map.get(str)+"</"+str+">");
    }
    sb.append("</" + methodName + ">");
    sb.append("</soap:Body>");
    sb.append("</soap:Envelope>");
    return sb.toString();
}

3.测试


public static void main(String[] args) throws Exception{
    String wsdl = "http://IP:端口/xxx?wsdl";
    String methodName = "方法名";
    Map<String ,String> map = new HashMap<>();
    map.put("参数名","参数值");
    //请求体xml
    String xml = getXml(map, methodName);
    //发送请求
    String s = sendHttpPost(wsdl, xml);
    System.out.println(s);
}

GET请求


import com.google.common.io.ByteStreams;
import org.apache.commons.httpclient.httpstatus;
import org.codehaus.jettison.JSON.jsONObject;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public static void main(String[] args) throws Exception{
    String url = "http://IP:端口/xxx/方法名?参数名=参数值";
    Map result = new HashMap(16);
    try {
        URL url = new URL(url);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        //设置输入输出,因为默认新创建的connection没有读写权限,
        connection.setDoInput(true);
        connection.setDoOutput(true);
        //接收服务端响应
        int responseCode = connection.getResponseCode();
        if(HttpStatus.SC_OK == responseCode){//表示服务端响应成功
            InputStream is = connection.getInputStream();
            //响应结果
            String s = new String(ByteStreams.toByteArray(is));
            result = com.alibaba.fastjson.JSONObject.parseObject(s, Map.class);
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("查询在线状态1:"+e.getMessage());
    }
    System.out.println(result);
}

通过webService调第三方提供的接口post与get

需求:第三方提供接口路径,在自己的项目中进行调用

注意点:调不通的时候排除接口本身的问题后,看看自己调用路径是不是正确的,有没多了或者少了【/】,参数的格式是不是跟接口文档的一致,再不行,那有可能是编码或者流处理的问题,我在实际开发中就是因为流处理的问题导致调不通。

POST

    public static String post(String method,String urls,String params){
        OutputStreamWriter out = null;
        try
        {
            URL url = new URL(urls);//第三方接口路径
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            // 创建连接
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod(method);//请求方式 此处为POST
            String token= "123456789";//根据实际项目需要,可能需要token值
            conn.setRequestProperty("token", token);
            conn.setRequestProperty("Content-type", "application/json");
            conn.connect();
            out = new OutputStreamWriter(conn.getOutputStream(), "utf-8");//编码设置
            out.write(params);
            out.flush();
            out.close();
            // 获取响应
            BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream()));
            String lines;
            StringBuffer sb = new StringBuffer();
            while ((lines = reader.readLine()) != null ){
                lines = new String(lines.getBytes(), "utf-8" );
                sb.append(lines);
            }
            reader.close();
            System.out.println(sb);
            return sb.toString();        
        }catch(Exception e) {
            e.printStackTrace();
        }
        return null;
    }

GET

//根据各自需要返回数组或者字符串   
//public static String getObject(String method,String urls,String params){
 public static JSONArray getArray(String method,String urls,String params){
        OutputStreamWriter out = null;
        try{
            URL url = new URL(urls);//接口路径
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setRequestMethod(method);//请求方法 此处为GET
            conn.setDoInput(true);
            conn.setDoOutput(true);
            String token = "123456789";//请求头token
            conn.setRequestProperty("token",token);
            conn.connect();
            int status = conn.getResponseCode();
            System.out.println(status);
 
            if(status == 200){
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));//怎么也调不通的时候,有可能流处理有问题
                String str = "";
                StringBuffer sb = new StringBuffer();
                while((str=reader.readLine()) != null){
                    sb.append(str);
                }
                //返回字符串的话,就直接返回 sb.toString()
                return JSONArray.parseArray(sb.toString());
            }
            System.out.println("请求服务失败,错误码为"+status);
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

用实体类进行接收返回值的话,需要将返回数据做下转换,转成我们需要的实体类格式

//返回数组转实体类
JSONArray sb = getArray(method,url,params);
if (sb!=null){
    List<实体类> list = JSONObject.parseArray(sb.toJSONString(), 实体类.class);
     return list;
}else {
     throw new CustomException("调用接口失败");
}
 
//返回字符串转实体类
String json = JSONObject.toJSONString(params);
String sb = post(method,url,json);
JSONObject testJson = JSONObject.parseObject(sb);
实体类dto = JSON.toJavaObject(testJson,实体类.class);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java webservice的POST和GET请求调用方式

本文链接: https://www.lsjlt.com/news/143564.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java webservice的POST和GET请求调用方式
    目录webservice的POST和GET请求调用POST请求1.发送请求2.POST请求体3.测试GET请求通过webService调第三方提供的接口post与getPOSTGET...
    99+
    2024-04-02
  • RestTemplate怎么调用POST和GET请求
    本文小编为大家详细介绍“RestTemplate怎么调用POST和GET请求”,内容详细,步骤清晰,细节处理妥当,希望这篇“RestTemplate怎么调用POST和GET请求”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-05
  • Java 使用 HttpClient 发送 GET请求和 POST请求
    目录概述认证方式基础认证Auth用户名密码认证Bearer Token 认证配置超时生成 RequestConfig设置超时时间概述 日常工作中,我们经常会有发送 HTTP 网络请求...
    99+
    2024-04-02
  • RestTemplate调用POST和GET请求示例详解
    目录正文一、POST请求调用二、GET请求调用三、Exchange调用正文 在日常开发过程中,http接口不仅提供给前端调用,有的时候还需要提供给其他业务方调用,在后台调用http...
    99+
    2023-05-13
    RestTemplate调用POST GET RestTemplate调用
  • get和post请求的区别
    GET请求和POST请求是HTTP协议中常用的两种请求方式,它们在以下几个方面有所区别:1. 参数传递方式:- GET请求将参数包含...
    99+
    2023-09-21
    get
  • java中httpclient封装post请求和get的请求实例
    目录httpclient封装post请求和get的请求httpclient的post和get请求所用的代码HttpClient发送Get、Post请求的实践1. 配置及实例化Http...
    99+
    2024-04-02
  • HTTP的请求方式GET和POST有什么区别
    这篇文章主要介绍“HTTP的请求方式GET和POST有什么区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“HTTP的请求方式GET和POST有什么区别”文章能帮助大家解决问题。HTTP的两种常用请...
    99+
    2023-06-27
  • GET和POST的区别,java模拟postman发post请求
    目录 一、先说一下get和post1、看一下人畜无害的w3schools怎么说:2、问一下文心你言哥,轻轻松松给你一个标准答案:3、卧槽,懂了,好像又没懂 二、让我们扒下GET和POST的外衣,坦诚相见吧!三、我们的大BOS...
    99+
    2023-08-17
    SpringMVC Spring spring boot 原力计划
  • get请求和 post请求的区别是什么
    GET请求和POST请求是HTTP协议中常用的两种请求方法,它们的区别如下:1. 参数传递方式:- GET请求:参数通过URL的查询...
    99+
    2023-09-22
    get
  • java发起http请求调用post与get接口的方法实例
    目录一、java调用post接口1、使用URLConnection或者HttpURLConnection2、使用CloseableHttpClient3、使用HttpCaller二、...
    99+
    2022-11-13
    java的get和post java获取post请求的请求体 接口get和post
  • PHP用curl发起POST和GET的请求
    文章目录 前言二、curl实现逻辑2.1 发送GET请求2.2 发送POST请求2.3 其他选项 三、file_get_content实现POST总结 前言 本文已收录于PHP全栈系...
    99+
    2023-09-12
    php 开发语言 服务器 PHP curl
  • HTTP协议中请求方法的Get和Post
    HTTP协议中请求方法Get和Post的区别是什么?Get:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。 Post:用来...
    99+
    2023-06-03
  • .Net中的Http请求调用详解(Post与Get)
    前言 http请求调用是开发中经常会用到的功能。在内,调用自有项目的Web Api等形式接口时会用到;在外,调用一些第三方功能接口时,也会用到,因为,这些第三方功能往往是通过http...
    99+
    2024-04-02
  • C#通过GET/POST方式发送Http请求
    目录两者的区别:参数传输数据的大小 安全性 Get请求 Post请求 介绍http请求的两种方式,get和post方式。并用C#语言实现,如何请求url并获取返回的数据 两者的区别:...
    99+
    2024-04-02
  • get请求和post请求的区别(简洁易懂)
    一.GET和POST是什么 HTTP协议中的两种发送请求的方法,本质上都是在进行TCP连接. 二. GET请求和POST请求的区别是什么 GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。 GET请求比POST请求更...
    99+
    2023-08-31
    服务器 运维
  • post和get请求的区别有哪些
    本篇内容介绍了“post和get请求的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、post请求更安全;post请求不会...
    99+
    2023-07-05
  • 在java中GET和POST请求有哪些区别
    在java中GET和POST请求的区别:GET通过地址栏传输,而POST则是通过报文传输。GET参数有长度限制,而POST无限制。GET产生一个TCP数据包,而POST产生两个TCP数据包。对参数的数据类型,GET只接受ASCII字符,而P...
    99+
    2024-04-02
  • react中axios结合后端实现GET和POST请求方式
    目录react axios结合后端实现GET和POST请求get实现方式1(参数直接在url中)get时间方式2(作为JSONString跟在url末尾)post实现(传递JSONO...
    99+
    2023-02-13
    react axios axios实现GET请求 axios实现POST请求
  • HTML请求方法get和post的区别是什么
    HTML 请求方法 GET 和 POST 是 HTTP 协议中常用的两种请求方法,它们的主要区别如下:1. 数据传输方式:GET 请...
    99+
    2023-10-11
    HTML
  • java使用RestTemplate封装post请求方式
    目录使用RestTemplate封装post请求RestTemplate使用封装1、SpringBoot使用RestTemplate(使用apache的httpclient)2、使用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作