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

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

错误代码:

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错误:

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)

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

正确代码:

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结构数据:

<?xml version="1.0" encoding="utf-8"?>100000000-0000-0000-0000-0000000000000成功

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

详解:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值