String signature = request.getParameter("signature");
String datas = request.getParameter("datas");
↑这是对面的接口的接收方式
sendstr是json数据包含signature,datas这两个数据
开始我用的是↓这个发送数据给对方,结果提示signature签名错误,百度一波发现接收的说是string类型
var arr = webc.UploadData(apiurl,Encoding.UTF8.GetBytes(sendstr));
后来我用了这个↓,发现还是不行,更悲剧的是接收后发现中文乱码,话说还不如上面那个呢,我用string arr2=Encoding.UTF8.GetString(arr)转下还能看到中文
string arr = webc.UploadString(apiurl, sendstr);
WebClient本身就可以做为表单提交,还是自己解决了,再次转换了一下思路,对方说的两个参数使用了↓这个东西传参
System.Collections.Specialized.NameValueCollection PostVars = new System.Collections.Specialized.NameValueCollection();
↑这个东西是键值对的集合PostVars.Add("A1","0");PostVars.Add("A2","0");........我用这个装起了两个键值对的参数。
WebClient.UploadValues(url,"POST",PostVars)再用这种形式传送数据成功的将功能完成
结尾,WebClient这个功能很强大
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 import java.io.PrintWriter; 5 import java.net.HttpURLConnection; 6 import java.net.URL; 7 import java.net.URLConnection; 8 import java.util.List; 9 import java.util.Map; 10 11 public class HttpUtils { 12 //用GET方式向指定URL发送形如key1=value1&key2=value2...的参数并同步接收应答 13 public static String sendGet(String url, String param) { 14 String result = ""; 15 BufferedReader in = null; 16 try { 17 String urlNameString = url + "?" + param; 18 URL realUrl = new URL(urlNameString); 19 // 打开和URL之间的连接 20 URLConnection connection = realUrl.openConnection(); 21 // 设置通用的请求属性 22 connection.setRequestProperty("accept", "*/*"); 23 connection.setRequestProperty("connection", "Keep-Alive"); 24 connection.setRequestProperty("user-agent", 25 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); 26 // 建立实际的连接 27 connection.connect(); 28 // 获取所有响应头字段 29 Map<String, List<String>> map = connection.getHeaderFields(); 30 // 遍历所有的响应头字段 31 for (String key : map.keySet()) { 32 System.out.println(key + "--->" + map.get(key)); 33 } 34 // 定义 BufferedReader输入流来读取URL的响应 35 in = new BufferedReader(new InputStreamReader( 36 connection.getInputStream())); 37 String line; 38 while ((line = in.readLine()) != null) { 39 result += line; 40 } 41 } catch (Exception e) { 42 System.out.println("发送GET请求出现异常!" + e); 43 e.printStackTrace(); 44 } 45 // 使用finally块来关闭输入流 46 finally { 47 try { 48 if (in != null) { 49 in.close(); 50 } 51 } catch (Exception e2) { 52 e2.printStackTrace(); 53 } 54 } 55 return result; 56 } 57 //用POST方式向指定URL发送形如key1=value1&key2=value2...的参数并同步接收应答 58 public static String sendPost(String url, String param) { 59 PrintWriter out = null; 60 BufferedReader in = null; 61 String result = ""; 62 try { 63 URL realUrl = new URL(url); 64 // 打开和URL之间的连接 65 HttpURLConnection httpConn = (HttpURLConnection) realUrl.openConnection(); 66 // 设置通用的请求属性 67 httpConn.setRequestProperty("accept", "*/*"); 68 httpConn.setRequestProperty("connection", "Keep-Alive"); 69 httpConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); 70 httpConn.setRequestMethod("POST"); 71 httpConn.setRequestProperty("Accept-Charset", "utf-8"); 72 httpConn.setRequestProperty("contentType", "utf-8"); 73 httpConn.setConnectTimeout(30000); 74 httpConn.setReadTimeout(30000); 75 // 发送POST请求必须设置如下两行 76 httpConn.setDoOutput(true); 77 httpConn.setDoInput(true); 78 httpConn.setUseCaches(false); 79 80 // 获取URLConnection对象对应的输出流 81 out = new PrintWriter(httpConn.getOutputStream()); 82 // 发送请求参数 83 out.print(param); 84 // flush输出流的缓冲 85 out.flush(); 86 // 定义BufferedReader输入流来读取URL的响应 87 in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "utf-8")); 88 String line; 89 while ((line = in.readLine()) != null) { 90 result += line; 91 } 92 } catch (Exception e) { 93 System.out.println("发送 POST 请求出现异常!"+e); 94 e.printStackTrace(); 95 } 96 //使用finally块来关闭输出流、输入流 97 finally{ 98 try{ 99 if(out!=null){ 100 out.close(); 101 } 102 if(in!=null){ 103 in.close(); 104 } 105 } 106 catch(IOException ex){ 107 ex.printStackTrace(); 108 } 109 } 110 return result; 111 } 112 }
上面是我们的项目里用来发送GET/POST请求时常用的工具类,你可以参考下。下面的代码是调用的方式。
1 public static void main(String[] args){ 2 String url = "http://www.yourdomain.com/service.do"; 3 String param = "datas=xxx&signature=xxxxx"; 4 String result = HttpUtils.sendPost(url, param); 5 System.out.println("result=" + result); 6 }
你这个是java的,我是C#的,winfrom中的单击事件写的
我该怎么已key1=value1&key2=value2这种形式将Value2换成json格式的数据?这样传:signature=ASD4654D65A4SD&datas=json数据 错了
然后我又这样传 signature=ASD4654D65A4SD&datas="json数据" 给json数据加上双引号还错了
@子明:你试着用signature=ASD4654D65A4SD&datas={key1:value1,key2:value2}请求下试试,如果有中文的话,需要先用java.net.URLEncoder.encode("中文内容", "UTF-8")转码,如果报错的话,把错误信息贴上来看看...
@吸氧羊与肥汰狼: 我结贴了,完成了。
换了一种形式传两个参数。以往习惯了将字符串转换为字节系列传,突然遇到这个要传两个参数的还不行。。。
最后换了个我不知道的方法,传了一个键值对的集合做到的。
@子明: 我也遇到这种问题呢,求方法,就是要传2个值给javaweb接收,其中一个是json格式字符串呢,加签后发现不对呢