http接口,报空指针,请教大虾

E_Java 2013-07-01 05:02:52
项目中要做一个发短信的功能,客户给了一个http接口url,一开始以为直接这样用BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 后来那个开发接口的公司说不能这样使用,也不能直接在浏览器窗口中输入url的请求:因为他们后台是这么处理的:
String result = "";
request.setCharacterEncoding("GBK");
BufferedReader br = request.getReader();
String line = br.readLine();
String[] params = line.split("&");
Map<String,Object> param = new HashMap<String,Object>();
for(String s : params){
String[] keyAndValue = s.split("=");
String key = keyAndValue[0];
String value = keyAndValue[1];
if(key.equals("SMSContent") || key.equals("DestMobile")) {
value = URLDecoder.decode(value,"GBK");
}
param.put(key, value);
if(!isOpen)System.out.println(key+":"+value);
}
if(!isOpen)System.out.println("");
String BizType = param.get("BizType").toString();
if(BizType.equals("01")){
result = smsWordService.senMsgServiceAPI(param);
}else if(BizType.equals("02")){
System.out.println("已发短信查询");
}else if(BizType.equals("03")){
System.out.println("上行短信查询");
}

后来httpClient.executeMethod(getMethod);
byte[] responseBody = getMethod.getResponseBody();
strHtml = new String(responseBody);
还是报空指针的错误,他们说给的url是正确的,是在不知道怎么写了
...全文
518 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxjxxmxhlr 2013-07-02
  • 打赏
  • 举报
回复
String inputParam = "BizType=01&LoginName=stjbpt&Password=st7023"; URL url = null; HttpURLConnection httpConn = null; OutputStream output = null; OutputStreamWriter outr = null; url = new URL("http://10.32.10.190/sms/SMSOutServlet"); //通过接口建立你的链接 httpConn = (HttpURLConnection) url.openConnection(); //这都不用你管了,都是些提交方式的写法,不过你最好确认一下是不是POST HttpURLConnection.setFollowRedirects(true); httpConn.setDoOutput(true); httpConn.setRequestMethod("POST"); httpConn.setRequestProperty("Content-Type", "text/xml"); httpConn.connect(); //获取输出流 output = httpConn.getOutputStream(); //套接 outr = new OutputStreamWriter(output); // 写入请求参数 outr.write(inputParam.toString().toCharArray(), 0, inputParam .toString().length()); outr.flush(); outr.close(); 这样穿过去是没啥问题的,但你说的为空我很在意是他们获取不到还是你获取不到呢
tubage408 2013-07-02
  • 打赏
  • 举报
回复
URL url = new URL("http://127.0.0.1:8080/abc/index.jsp"); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setDoOutput(true); connection.setUseCaches(false); //connection.setChunkedStreamingMode(0); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestMethod("POST"); connection.connect(); //System.out.println(connection.getResponseCode()); String params = "userName=123&pwd=456"; OutputStream os = new BufferedOutputStream(connection.getOutputStream()); os.write(params.getBytes()); os.flush(); os.close(); connection.getResponseCode(); connection.disconnect();
E_Java 2013-07-02
  • 打赏
  • 举报
回复
引用 7 楼 rui888 的回复:
他们的地址是 10.32.10.190,和你的不在同一服务器?他们为什么不搞个webservice 啊,搞得那么复杂。等大牛。
不在同一个服务器
tony4geek 2013-07-02
  • 打赏
  • 举报
回复
他们的地址是 10.32.10.190,和你的不在同一服务器?他们为什么不搞个webservice 啊,搞得那么复杂。等大牛。
E_Java 2013-07-02
  • 打赏
  • 举报
回复
引用 10 楼 xxjxxmxhlr 的回复:
String inputParam = "BizType=01&LoginName=stjbpt&Password=st7023"; URL url = null; HttpURLConnection httpConn = null; OutputStream output = null; OutputStreamWriter outr = null; url = new URL("http://10.32.10.190/sms/SMSOutServlet"); //通过接口建立你的链接 httpConn = (HttpURLConnection) url.openConnection(); //这都不用你管了,都是些提交方式的写法,不过你最好确认一下是不是POST HttpURLConnection.setFollowRedirects(true); httpConn.setDoOutput(true); httpConn.setRequestMethod("POST"); httpConn.setRequestProperty("Content-Type", "text/xml"); httpConn.connect(); //获取输出流 output = httpConn.getOutputStream(); //套接 outr = new OutputStreamWriter(output); // 写入请求参数 outr.write(inputParam.toString().toCharArray(), 0, inputParam .toString().length()); outr.flush(); outr.close(); 这样穿过去是没啥问题的,但你说的为空我很在意是他们获取不到还是你获取不到呢
太感谢了,我按照你的方法成功了。之前他们那边报空指针是因为有一段小乱码
E_Java 2013-07-01
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
关于request.getReader()
我把提交方式改为multipart/form-data还是不行啊,他们说参数不放在url后面,放在输入流里,不知道该怎么放
strb.append("http://127.0.0.1:8080/PoliceProtectionSystem/sms?BizType=01&LoginName=stjbpt&Password=st7023");
		//strb.append("http://10.32.10.190/sms/SMSOutServlet?BizType=01&LoginName=stjbpt&Password=st7023");
		strb.append("&DestMobile=").append(mobile);
		strb.append("&SMSContent=").append(content);
		try {
			httpconn = (HttpURLConnection) new URL(strb.toString()).openConnection(); 
			httpconn.setConnectTimeout(60000); 
			httpconn.setDoOutput(true); 
			httpconn.setRequestMethod("POST");
			httpconn.setUseCaches(false);
			httpconn.setInstanceFollowRedirects(true);
			httpconn.setRequestProperty("Content-Type", "multipart/form-data");
			httpconn.connect();
		    
		    ByteArrayOutputStream bout = new ByteArrayOutputStream();

		    out = new DataOutputStream(httpconn.getOutputStream());
		    out.write(bout.toByteArray());
			InputStream in = new BufferedInputStream(httpconn.getInputStream()); 
			rd = new InputStreamReader(in,"UTF-8"); 
			int c = 0; 
			StringBuilder sb = new StringBuilder();
			while ((c = rd.read()) != -1) { 
				sb.append((char) c); 
			} 
			in.close(); 
			strHtml = sb.toString(); 
E_Java 2013-07-01
  • 打赏
  • 举报
回复
引用 4 楼 ahxuemei 的回复:
对于你来说是输出流,他们输入流来接收;要是偶的话,偶就直接问他们要单元测试案例,他们比较要保证他们的是对的。
问他们要了,他们一副不想理你的样子
ahxuemei 2013-07-01
  • 打赏
  • 举报
回复
对于你来说是输出流,他们输入流来接收;要是偶的话,偶就直接问他们要单元测试案例,他们比较要保证他们的是对的。
tony4geek 2013-07-01
  • 打赏
  • 举报
回复
E_Java 2013-07-01
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
确认你传入的参数是否是正确的,result 是否有返回的数据啊?
我问了那个开发,他说他们的参数是放在输入流里,然后后台request.getReader();这么取的,那我怎么把参数放到输入流里呢
tony4geek 2013-07-01
  • 打赏
  • 举报
回复
确认你传入的参数是否是正确的,result 是否有返回的数据啊?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧