首页 新闻 搜索 专区 学院

使用WebClient传送json数据给java接口

0
悬赏园豆:10 [已解决问题] 解决于 2016-11-04 16:16

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);

子明的主页 子明 | 初学一级 | 园豆:109
提问于:2016-11-04 15:30
< >
分享
最佳答案
1

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这个功能很强大

子明 | 初学一级 |园豆:109 | 2016-11-04 16:15
其他回答(1)
0
  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 }
View Code

上面是我们的项目里用来发送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     }
View Code

 

收获园豆:10
吸氧羊与肥汰狼 | 园豆:280 (菜鸟二级) | 2016-11-04 15:43

你这个是java的,我是C#的,winfrom中的单击事件写的

支持(0) 反对(0) 子明 | 园豆:109 (初学一级) | 2016-11-04 15:47

我该怎么已key1=value1&key2=value2这种形式将Value2换成json格式的数据?这样传:signature=ASD4654D65A4SD&datas=json数据   错了

然后我又这样传 signature=ASD4654D65A4SD&datas="json数据"  给json数据加上双引号还错了

支持(0) 反对(0) 子明 | 园豆:109 (初学一级) | 2016-11-04 16:01

@子明:你试着用signature=ASD4654D65A4SD&datas={key1:value1,key2:value2}请求下试试,如果有中文的话,需要先用java.net.URLEncoder.encode("中文内容", "UTF-8")转码,如果报错的话,把错误信息贴上来看看...

支持(0) 反对(0) 吸氧羊与肥汰狼 | 园豆:280 (菜鸟二级) | 2016-11-04 16:14

@吸氧羊与肥汰狼: 我结贴了,完成了。

换了一种形式传两个参数。以往习惯了将字符串转换为字节系列传,突然遇到这个要传两个参数的还不行。。。

最后换了个我不知道的方法,传了一个键值对的集合做到的。

支持(0) 反对(0) 子明 | 园豆:109 (初学一级) | 2016-11-04 16:18

@子明: 我也遇到这种问题呢,求方法,就是要传2个值给javaweb接收,其中一个是json格式字符串呢,加签后发现不对呢

支持(0) 反对(0) EApple | 园豆:139 (初学一级) | 2018-06-26 11:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册