java 调用http获取返回值

本文深入探讨了HTTP POST请求的原理与实现过程,包括如何配置URL连接、设置输出模式及发送POST信息,并展示了获取服务器响应的方法。

 public static void testPost() throws IOException {   
      
            /**  
             * 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using  
             *  java.net.URL and //java.net.URLConnection  
             */  
      System.setProperty("http.proxyHost", www.xxx.com); 
      System.setProperty("http.proxyPort", "8080"); 
                   
     String strUrl="http://";
            URL url = new URL(strUrl);   
            URLConnection connection = url.openConnection();   
            /**  
             * 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。  
             * 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做:  
             */  
            connection.setDoOutput(true);   
            /**  
             * 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ...  
             */  
            OutputStreamWriter out = new OutputStreamWriter(connection   
                    .getOutputStream(), "8859_1");   
            // remember to clean up   
            out.flush();   
            out.close();   
            /**  
             * 这样就可以发送一个看起来象这样的POST:   
             * POST /jobsearch/jobsearch.cgi HTTP 1.0 ACCEPT:  
             * text/plain Content-type: application/x-www-form-urlencoded  
             * Content-length: 99 username=bob password=someword  
             */  
            // 一旦发送成功,用以下方法就可以得到服务器的回应:   
            String sCurrentLine;   
            String sTotalString;   
            sCurrentLine = "";   
            sTotalString = "";   
            InputStream l_urlStream;   
            l_urlStream = connection.getInputStream();   
            // 传说中的三层包装阿!   
            BufferedReader l_reader = new BufferedReader(new InputStreamReader(   
                    l_urlStream));   
            while ((sCurrentLine = l_reader.readLine()) != null) {   
             System.out.println(sCurrentLine);
                sTotalString += sCurrentLine + "\r\n";   
      
            }   
            System.out.println(sTotalString);   
        }   

### Java中通过WSDL调用HTTP服务并处理返回的XML数据 在Java应用程序中利用WSDL文件来调用Web Service接口,并对接口响应中的XML文档进行解析是一项常见的需求。对于给定的任务,可以采用Apache Axis工具生成客户端存根代码[^1]。 #### 使用`WSDL2Java`命令行工具生成客户端代码 为了简化开发过程,可以通过执行如下命令自动生成用于访问指定Web Service的服务端代理类: ```bash java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx?wsdl ``` 此操作会基于所提供的WSDL定义创建一系列必要的Java源文件,这些文件包含了远程方法签名以及序列化/反序列化的逻辑。 #### 创建测试环境准备调用WebService 针对特定场景下的Webservice调用实例,在编写具体业务逻辑之前需先设置好基本配置参数,例如目标URL地址、请求的方法名称及其命名空间等信息[^2]。 ```java @Slf4j public class Test { static final String url = "http://localhost:8091/roadcqc_webservice_war_exploded/services/loginIntf?wsdl"; static final String method = "getToken"; static final String targetNamespace = "http://login.webserivce.server.roadcqc.yemast.com"; public static void main(String[] args) throws Exception { // 实现具体的调用流程... } } ``` #### 处理返回的数据流 当接收到服务器回应之后,通常情况下消息体是以SOAP封装的形式呈现出来的;因此需要从中提取实际的有效载荷部分再做进一步分析。这里推荐使用JAXB (Java Architecture for XML Binding),它允许开发者轻松地将XML结构映射成对象模型以便于后续的操作和维护工作。 假设已经成功获取到了完整的Response字符串,则可通过下面的方式完成转换: ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; // 假设这是从网络读取到的结果串 String xmlContent = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Body>...</soapenv:Body></soapenv:Envelope>"; try { JAXBContext context = JAXBContext.newInstance(Response.class); Unmarshaller unmarshaller = context.createUnmarshaller(); // 将整个包络去掉只保留body内的内容作为输入传递给unmarshal函数 InputStream inputStream = new ByteArrayInputStream(xmlContent.substring(57, xmlContent.length()-16).getBytes()); Response responseObj = (Response) unmarshaller.unmarshal(inputStream); } catch (Exception e) { log.error("Failed to parse the returned data", e); } ``` 上述代码片段展示了如何运用JAXB库把来自远端API回复的信息转化为易于管理的对象形式。需要注意的是,这里的`Response`应该是指向由`WSDL2Java`所生成的那个代表预期输出类型的POJO(Plain Old Java Object)。此外,由于原始XML可能带有额外标签包裹着真正关心的内容,所以在传入解码器前应当适当裁剪掉不必要的头部与尾部标记。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值