今天在测试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到输出流中,实现了正常的访问,得到了正确的返回结果
相关推荐
在Java编程语言中,HTTPURLConnection是Java标准库提供的一个接口,用于通过HTTP协议与服务器进行通信。这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,...
在Java中实现DICOM接口,可以让我们构建跨平台的医学图像处理应用。 在Java中实现DICOM接口,首先需要理解DICOM的数据模型。DICOM数据主要由DICOM对象(DICOM Dataset,简称DS)组成,它包含了各种数据元素(DICOM ...
总结来说,C#调用Java接口是一个相对复杂的过程,需要对Java和.NET平台都有深入的理解。使用IKVM.NET或其他类似的工具可以简化这个过程,但仍然需要注意跨语言通信中的类型映射、异常处理和性能优化等问题。实际项目...
总结,C++库封装JNI接口实现Java调用C++涉及的主要步骤包括:声明Java中的本地方法,生成JNI头文件,编写C++实现,编译成库,最后在Java中加载并调用。这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种...
Java配置化接口规范是软件开发中的一个重要环节,它涉及到如何设计和实现能够灵活配置的HTTP接口,以便通过Web页面来管理API接口,动态获取所需的数据。这种规范通常是为了提高系统的可维护性和扩展性,降低代码与...
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的强大功能,同时也能让Java程序调用Matlab的功能,实现数据处理和计算任务的无缝对接。本文将详细阐述配置要求、环境配置、...
**标题解析:** "BasicAuth的Java服务端实现" 指的是使用Java语言在服务端实现HTTP的基本认证(Basic Authentication)机制。这种认证方式是HTTP协议标准的一部分,用于在网络服务器上验证用户身份。 **基本认证...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
在Java中,类可以通过关键字`extends`来继承另一个类,并且可以实现一个或多个接口。接口之间可以通过`extends`关键字实现接口的继承,形成接口的层次结构。了解这些关系有助于理解代码的组织结构,优化设计,并避免...
在跨平台应用开发中,有时候我们需要在Java环境中调用C#实现的功能,这通常通过Web服务或者中间件来实现。本文将深入探讨如何在Java中调用C#接口,以及涉及的相关技术栈。 1. **Java与C#的互操作性** Java和C#虽然...
### Java包、接口、异常处理实验知识点解析 #### 实验一:Java包的理解与使用 1. **Java包的概念**: - Java包是用于组织类的一种方式,它可以帮助我们管理大量的类,使得代码结构更加清晰。 - 包允许我们将相关...
在Java开发中,中间接口转发(Middleware Interface Forwarding)是一种常见的设计模式,它主要用于实现业务逻辑的解耦和系统的稳定性。这个DEMO展示了如何在Java中构建这样的中间层,以应对第三方API可能出现的问题...
Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程...
在Java中,USB通信通常通过Java的Java Communications API(JSR 80)或更具体的UsbApi来实现。Java USB架包可能是基于这些API进行封装,提供了一套更简洁易用的接口,使得开发者无需深入理解底层细节,就能轻松地与...
Java访问WCF服务是跨平台...以上就是使用Java HttpClient访问WCF服务的基本知识,实际应用中可能需要根据具体服务接口和需求进行调整。文件"java4Wcf"可能包含完整的示例代码或更详细的步骤,建议结合该文件深入学习。
总结,Spring Boot中实现接口访问频率限制的方法多样,可以根据项目需求选择合适的方式。无论是手动编写AOP切面还是借助现有组件,核心都是在保护系统的同时,提供良好的用户体验。通过合理的频率控制,我们可以避免...