zl程序教程

您现在的位置是:首页 >  后端

当前栏目

接口 C#/Java 请求数据 form-data 的方式传输复杂对象

JAVAc#接口对象数据 方式 请求 Data
2023-09-11 14:22:26 时间

原文:
https://www.cnblogs.com/bookyao/p/11602212.html
https://www.cnblogs.com/bookyao/p/12134438.html

C#代码


                string postString = "Id=0&Name=11144411&Mark=%E5%A4%87%E6%B3%A81&SignStepId=112&SignFlowId=28&ShouldUserIds=421&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BSupplyId%5D=1&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BSupplyName%5D=%E7%AC%94&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BPrice%5D=1&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BNum%5D=2&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BMark%5D=%E5%A4%87%E6%B3%A82";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来  
                byte[] postData = Encoding.UTF8.GetBytes(postString);//编码,尤其是汉字,事先要看下抓取网页的编码方式  
                string url = "http://localhost:34611/apis/OAIndividual/SaveOAOfficeSupplyApply";//地址  

                WebClient webClient = new WebClient();
                webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可  
                webClient.Headers.Add("Cookie", "Abp.TenantId=1; ASP.NET_SessionId=1a4qtdozyb2luqr25rbxmqkt; .AspNetCore.Antiforgery.AcSpg7uy7mk=CfDJ8Bu93kbkXodIukCRkyhe5TYhr3WCXnGWBtjLJgCpb7it26iOsRa9B3VpKEkXLjOyZvbAdzBejm48ytubLuJXqEOy_qX1dJnJSSStH2ETV7av2vgj60lR9LjnfjqrnmvXQEk13gfnKGhx0eJc386tUy0; .AspNetCore.Identity.Application=CfDJ8Bu93kbkXodIukCRkyhe5TZ6rCnVq6q8Hj8iHvZL2onb3xXMBJ7c3PAvWvNnymmA-Y2_uuHqWv4eKV72-_XrtNqNaSINiJ7pQzxYZ4BKlMgZCv3_8KsQGxeYq2OpFViOYGOA2k5dgFN9zL1_LIbfqRqat5uIlHyP4BtyQamnU0QPt45SbiD9G0OHt2jWqL4QMglEsqkjdYCwRVs6KK6PJHFs1SiA7hzdZiEpfFlKdxO8ApnrM_Rae_eoiSUHANKeqVAokn6BDlNxUv-PtFHpuxfr_GOVIIlw9yXlZqdG6Kb1VQ5wIOpGQOZpq2jNNUDbTdgVWRcFNkWIhNSrdvzGDdUoVAKZBK_qo2xc2uUzXw432t-KrRFJSlx0bpcMEoE2y9yar1Rf1Zc6yzeDObqtuYaS4BwvwyAS0tpc69bzpd2F1hxrzKZMBK2bEVd9CH-SCCoha6ERveN6ceGYKcdQ8dA6j9Wjhzmv9z4L87J8RPLZjZPZF6UYv5PSa7d1kqh-X7e6ccbqIyTEdFFAO2d7UjE-XvBvZ2mAuB3Se1fyBOSFe1KH4yJn6__WkWd90iaCofHhqgg1j1Jm8jQ0047Qlo3V2i8yVloJSsqrdX6Y0fQTH-yLNoJ3qSGkIhnRpWR6H53BLZtnPDH-vEjnssvr0bSV4TtFXMJ7gt7kNojmpzD0hTz-r-ZLxfCnPNO6-1RujLOFMf_G1sUmbV_8JXtpcSwoR388Zn48eL87gEah1T5oUXInM7_qk3HSmlQtcZ-s-YrF31K8Lp_p-dHtQ-cPrme_KelrNt2puzw1ye5a7aZdbbneqsu9k3Tmb8EBlclEWLk96RfD04VsuMwDKgMLm6a9vcxVukxeNuX7gj9YkwsF8GMBeRXyFQ-9c_FBQXHIGunV0soihxWR5b89eoxjE34FY_2dfIfWJeU9KPf1iHrqU1aj1_FfGZHAHHYel-Yp4RFmIQtp1pyzGIbXZEkaaebvwteC6HCHGqSXX1SekyLdklj6rdZvFgedIm5_XIktbnwb9Oaej0LkfRONZmrffqMDOEePxWe__EQJ4VaMn2GPX3ikKGA-7rzlyg9nzLMuuTq4pmB_JfiPo22pPrR2vrrbkapB0jRd53_XKURh6vgwO6CVRBbp28vHCSKje-G-8S3AR3PHOyoHd-pwrI6rC6kW6SnASr7ExqS2AOXBxfR5-OTCY-erT68bA7WJw-TZa4AHk_h0SXo2wk76P9lKxWaeLLuKp_6s6lLcihNhXIVSMb-S7DgUhyAnhix-VPlqgfR2JDmHmFhgJMFCjiMiIVFj_N7PbP9SM_zWxPiGxC5F3Mym4xguJFPT-EN5kLq1pwId3bNnX6p6ksvIc03oqj0GOyPWHGcvF7Qnv4QeQbq4SeA7D1SbpbcHTi7mmtITYrnWL7kE7JLBJQK6PTNywK0; XSRF-TOKEN=CfDJ8Bu93kbkXodIukCRkyhe5TaxVpt_KnURVc7CSJSdAiLG_NfnshSc7eduhCbW6fbSUIbeTzCOSgASSHY2FnxWZ5Q2ZFvX4Dpe2o-8AAXIIv1UvZWNuo5nZioTbMfMGc-ZPRgeZtoZs6IUhuMQdbkN1fnpantZsCfSjTT9I6Ltw8LcrHUDm1EsmfjySWC5MQbkdQ");
                webClient.Headers.Add("X-XSRF-TOKEN", "CfDJ8Bu93kbkXodIukCRkyhe5TaxVpt_KnURVc7CSJSdAiLG_NfnshSc7eduhCbW6fbSUIbeTzCOSgASSHY2FnxWZ5Q2ZFvX4Dpe2o-8AAXIIv1UvZWNuo5nZioTbMfMGc-ZPRgeZtoZs6IUhuMQdbkN1fnpantZsCfSjTT9I6Ltw8LcrHUDm1EsmfjySWC5MQbkdQ");

                byte[] responseData = webClient.UploadData(url, "POST", postData);//得到返回字符流  
                string srcString = Encoding.UTF8.GetString(responseData);//解码  
                Console.WriteLine(srcString);


Java代码


	public static void test1() {
		String postString = "Id=0&Name=222&Mark=%E5%A4%87%E6%B3%A81&SignStepId=112&SignFlowId=28&ShouldUserIds=421&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BSupplyId%5D=1&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BSupplyName%5D=%E7%AC%94&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BPrice%5D=1&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BNum%5D=2&OAOfficeSupplyApplyGoodsApiDtos%5B0%5D%5BMark%5D=%E5%A4%87%E6%B3%A82";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来
		interfaceUtil("http://localhost:34611/apis/OAIndividual/SaveOAOfficeSupplyApply", postString);
	}

	public static void interfaceUtil(String path, String data) {
		try {
			// 原文:https://www.cnblogs.com/angusbao/p/7727649.html
			URL url = new URL(path);
			//打开和url之间的连接
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			PrintWriter out = null;
			//请求方式
			conn.setRequestMethod("POST");
			//设置header
			conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			conn.setRequestProperty("Cookie", "Abp.TenantId=1; ASP.NET_SessionId=1a4qtdozyb2luqr25rbxmqkt; .AspNetCore.Antiforgery.AcSpg7uy7mk=CfDJ8Bu93kbkXodIukCRkyhe5TYhr3WCXnGWBtjLJgCpb7it26iOsRa9B3VpKEkXLjOyZvbAdzBejm48ytubLuJXqEOy_qX1dJnJSSStH2ETV7av2vgj60lR9LjnfjqrnmvXQEk13gfnKGhx0eJc386tUy0; .AspNetCore.Identity.Application=CfDJ8Bu93kbkXodIukCRkyhe5TZ6rCnVq6q8Hj8iHvZL2onb3xXMBJ7c3PAvWvNnymmA-Y2_uuHqWv4eKV72-_XrtNqNaSINiJ7pQzxYZ4BKlMgZCv3_8KsQGxeYq2OpFViOYGOA2k5dgFN9zL1_LIbfqRqat5uIlHyP4BtyQamnU0QPt45SbiD9G0OHt2jWqL4QMglEsqkjdYCwRVs6KK6PJHFs1SiA7hzdZiEpfFlKdxO8ApnrM_Rae_eoiSUHANKeqVAokn6BDlNxUv-PtFHpuxfr_GOVIIlw9yXlZqdG6Kb1VQ5wIOpGQOZpq2jNNUDbTdgVWRcFNkWIhNSrdvzGDdUoVAKZBK_qo2xc2uUzXw432t-KrRFJSlx0bpcMEoE2y9yar1Rf1Zc6yzeDObqtuYaS4BwvwyAS0tpc69bzpd2F1hxrzKZMBK2bEVd9CH-SCCoha6ERveN6ceGYKcdQ8dA6j9Wjhzmv9z4L87J8RPLZjZPZF6UYv5PSa7d1kqh-X7e6ccbqIyTEdFFAO2d7UjE-XvBvZ2mAuB3Se1fyBOSFe1KH4yJn6__WkWd90iaCofHhqgg1j1Jm8jQ0047Qlo3V2i8yVloJSsqrdX6Y0fQTH-yLNoJ3qSGkIhnRpWR6H53BLZtnPDH-vEjnssvr0bSV4TtFXMJ7gt7kNojmpzD0hTz-r-ZLxfCnPNO6-1RujLOFMf_G1sUmbV_8JXtpcSwoR388Zn48eL87gEah1T5oUXInM7_qk3HSmlQtcZ-s-YrF31K8Lp_p-dHtQ-cPrme_KelrNt2puzw1ye5a7aZdbbneqsu9k3Tmb8EBlclEWLk96RfD04VsuMwDKgMLm6a9vcxVukxeNuX7gj9YkwsF8GMBeRXyFQ-9c_FBQXHIGunV0soihxWR5b89eoxjE34FY_2dfIfWJeU9KPf1iHrqU1aj1_FfGZHAHHYel-Yp4RFmIQtp1pyzGIbXZEkaaebvwteC6HCHGqSXX1SekyLdklj6rdZvFgedIm5_XIktbnwb9Oaej0LkfRONZmrffqMDOEePxWe__EQJ4VaMn2GPX3ikKGA-7rzlyg9nzLMuuTq4pmB_JfiPo22pPrR2vrrbkapB0jRd53_XKURh6vgwO6CVRBbp28vHCSKje-G-8S3AR3PHOyoHd-pwrI6rC6kW6SnASr7ExqS2AOXBxfR5-OTCY-erT68bA7WJw-TZa4AHk_h0SXo2wk76P9lKxWaeLLuKp_6s6lLcihNhXIVSMb-S7DgUhyAnhix-VPlqgfR2JDmHmFhgJMFCjiMiIVFj_N7PbP9SM_zWxPiGxC5F3Mym4xguJFPT-EN5kLq1pwId3bNnX6p6ksvIc03oqj0GOyPWHGcvF7Qnv4QeQbq4SeA7D1SbpbcHTi7mmtITYrnWL7kE7JLBJQK6PTNywK0; XSRF-TOKEN=CfDJ8Bu93kbkXodIukCRkyhe5TaxVpt_KnURVc7CSJSdAiLG_NfnshSc7eduhCbW6fbSUIbeTzCOSgASSHY2FnxWZ5Q2ZFvX4Dpe2o-8AAXIIv1UvZWNuo5nZioTbMfMGc-ZPRgeZtoZs6IUhuMQdbkN1fnpantZsCfSjTT9I6Ltw8LcrHUDm1EsmfjySWC5MQbkdQ");
			conn.setRequestProperty("X-XSRF-TOKEN", "CfDJ8Bu93kbkXodIukCRkyhe5TaxVpt_KnURVc7CSJSdAiLG_NfnshSc7eduhCbW6fbSUIbeTzCOSgASSHY2FnxWZ5Q2ZFvX4Dpe2o-8AAXIIv1UvZWNuo5nZioTbMfMGc-ZPRgeZtoZs6IUhuMQdbkN1fnpantZsCfSjTT9I6Ltw8LcrHUDm1EsmfjySWC5MQbkdQ");
			//设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
			//最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
			//post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
			conn.setDoOutput(true);
			conn.setDoInput(true);
			//获取URLConnection对象对应的输出流
			out = new PrintWriter(conn.getOutputStream());
			//发送请求参数即数据
			out.print(data);
			//缓冲数据
			out.flush();
			//获取URLConnection对象对应的输入流
			InputStream is = conn.getInputStream();
			//构造一个字符流缓存
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String str = "";
			while ((str = br.readLine()) != null) {
				System.out.println(str);
			}
			//关闭流
			is.close();
			//断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
			//固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
			conn.disconnect();
			System.out.println("完整结束");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

游览器

Post Man