`
tcw290
  • 浏览: 22403 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过JAVA的net包实现JAVA http接口访问错误总结 500

 
阅读更多

今天在测试http短信接口时,犯了个错误,导致一天工作下来都不爽,晚上回来调试了很久,总算找到问题所在,竟然很简单,甚感羞愧,特此记录,以绝再犯。

错误代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
URL myUrl = new URL("http://sms.hcsdsms.com:8080/SmsService/SmsService.asmx/SendEx?"
            + "UserId=XXXXXX&Password=XXXXXX&MsgContent=短信测试"
            + "&DestNumber=15817611***&SendTime=&SubNumber="
            + "&BizType=22&WapURL=&BatchSendID=");
HttpURLConnection conn = (HttpURLConnection) myUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
osw.write("");
osw.flush();
osw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String s = null;
while ((s = br.readLine()) != null) {
     sb.append(s);
}

当执行程序时,控制台报500错误:

1
2
3
4
java.io.IOException: Server returned HTTP response code: 500 for URL: http://sms.hcsdsms.com:8080/SmsService/SmsService.asmx/SendEx?UserId=XXXXXX&Password=XXXXXX&MsgContent=短信测试&DestNumber=15817611***&SendTime=&SubNumber=&BizType=22&WapURL=&BatchSendID=
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sms.SmsHttpTest.doHttp(SmsHttpTest.java:43)
at sms.SmsHttpTest.test(SmsHttpTest.java:23)

-----------------------------------------------------------

正确代码: 
      

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
URL myUrl = new URL("http://sms.hcsdsms.com:8080/SmsService/SmsService.asmx/SendEx?");
HttpURLConnection conn = (HttpURLConnection) myUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
osw.write("UserId=XXXXXX&Password=XXXXXX&MsgContent=短信测试"
            + "&DestNumber=15817611***&SendTime=&SubNumber="
            + "&BizType=22&WapURL=&BatchSendID=");
osw.flush();
osw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String s = null;
while ((s = br.readLine()) != null) {
          sb.append(s);
}

执行程序,得到返回的XML结构数据:

1
<?xml version="1.0" encoding="utf-8"?><SendExResp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">  <PayCount>1</PayCount>  <BlackWords />  <ErrorMobiles />  <BlackMobiles />  <BatchSendID>00000000-0000-0000-0000-000000000000</BatchSendID>  <Result>0</Result>  <ErrorDesc>成功</ErrorDesc></SendExResp>

-------------------------------------------------------

详解:

通过url字符串构造java.net.URL对象,并打开连接(myUrl.openConnection())时,实际上只针对URL中的访问路径http://sms.hcsdsms.com:8080/SmsService/SmsService.asmx/SendEx?建立了连接,而后面的一系列参数串并不是建立连接的有效部分,所以被舍去了。当访问API时,由于服务端强制要求相应的参数必不可少,在建立连接后也没有把相应的参数通过输出流write到服务端,所以程序报错。

在正确的代码中,通过将服务端强制要求的必需参数write到输出流中,实现了正常的访问,得到了正确的返回结果

http://my.oschina.net/ichatter/blog/76487

分享到:
评论

相关推荐

    Java自带的HttpURLConnection访问接口实现文件上传

    在Java编程语言中,HTTPURLConnection是Java标准库提供的一个接口,用于通过HTTP协议与服务器进行通信。这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,...

    DICOM医学图像数据接口的Java实现

    在Java中实现DICOM接口,可以让我们构建跨平台的医学图像处理应用。 在Java中实现DICOM接口,首先需要理解DICOM的数据模型。DICOM数据主要由DICOM对象(DICOM Dataset,简称DS)组成,它包含了各种数据元素(DICOM ...

    C#调用Java接口演示

    总结来说,C#调用Java接口是一个相对复杂的过程,需要对Java和.NET平台都有深入的理解。使用IKVM.NET或其他类似的工具可以简化这个过程,但仍然需要注意跨语言通信中的类型映射、异常处理和性能优化等问题。实际项目...

    C++库封装JNI接口-实现java调用c++

    总结,C++库封装JNI接口实现Java调用C++涉及的主要步骤包括:声明Java中的本地方法,生成JNI头文件,编写C++实现,编译成库,最后在Java中加载并调用。这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种...

    java配置化接口规范

    Java配置化接口规范是软件开发中的一个重要环节,它涉及到如何设计和实现能够灵活配置的HTTP接口,以便通过Web页面来管理API接口,动态获取所需的数据。这种规范通常是为了提高系统的可维护性和扩展性,降低代码与...

    JAVA_API1.6文档(中文)

    javax.xml.transform.stream 此包实现特定于流和 URI 的转换 API。 javax.xml.validation 此包提供了用于 XML 文档验证的 API。 javax.xml.ws 此包包含核心 JAX-WS API。 javax.xml.ws.handler 该包定义用于消息...

    Matlab与java接口(图文并茂)

    Matlab与Java接口技术是实现两者间高效交互的重要途径,它允许我们在Matlab环境中利用Java的强大功能,同时也能让Java程序调用Matlab的功能,实现数据处理和计算任务的无缝对接。本文将详细阐述配置要求、环境配置、...

    BasicAuth的Java服务端实现

    **标题解析:** "BasicAuth的Java服务端实现" 指的是使用Java语言在服务端实现HTTP的基本认证(Basic Authentication)机制。这种认证方式是HTTP协议标准的一部分,用于在网络服务器上验证用户身份。 **基本认证...

    java开源包4

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开发接口帮助文档

    在Java中,类可以通过关键字`extends`来继承另一个类,并且可以实现一个或多个接口。接口之间可以通过`extends`关键字实现接口的继承,形成接口的层次结构。了解这些关系有助于理解代码的组织结构,优化设计,并避免...

    java调用C#接口及所涉及到的架包

    在跨平台应用开发中,有时候我们需要在Java环境中调用C#实现的功能,这通常通过Web服务或者中间件来实现。本文将深入探讨如何在Java中调用C#接口,以及涉及的相关技术栈。 1. **Java与C#的互操作性** Java和C#虽然...

    java包接口异常处理实验

    ### Java包、接口、异常处理实验知识点解析 #### 实验一:Java包的理解与使用 1. **Java包的概念**: - Java包是用于组织类的一种方式,它可以帮助我们管理大量的类,使得代码结构更加清晰。 - 包允许我们将相关...

    JAVA中间接口转发DEMO

    在Java开发中,中间接口转发(Middleware Interface Forwarding)是一种常见的设计模式,它主要用于实现业务逻辑的解耦和系统的稳定性。这个DEMO展示了如何在Java中构建这样的中间层,以应对第三方API可能出现的问题...

    java调用soap接口案例

    Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...

    java开源包1

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包8

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java源码包---java 源码 大量 实例

    演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程...

    java-usb夹包

    在Java中,USB通信通常通过Java的Java Communications API(JSR 80)或更具体的UsbApi来实现。Java USB架包可能是基于这些API进行封装,提供了一套更简洁易用的接口,使得开发者无需深入理解底层细节,就能轻松地与...

    java 访问 wcf 示例(使用的HttpClient)

    Java访问WCF服务是跨平台...以上就是使用Java HttpClient访问WCF服务的基本知识,实际应用中可能需要根据具体服务接口和需求进行调整。文件"java4Wcf"可能包含完整的示例代码或更详细的步骤,建议结合该文件深入学习。

    SpringBoot 接口访问频率限制(一)

    总结,Spring Boot中实现接口访问频率限制的方法多样,可以根据项目需求选择合适的方式。无论是手动编写AOP切面还是借助现有组件,核心都是在保护系统的同时,提供良好的用户体验。通过合理的频率控制,我们可以避免...

Global site tag (gtag.js) - Google Analytics