C#中发送HttpPost请求来调用WebService
2015-07-20 08:37
681 查看
一、Webservice调用的三种方式:
Webservice调用1:浏览器中输入以下URL,然后再返回的页面输入参数,提交实现调用
http://localhost/WebService/MyService.asmx?op=MyAction
Webservice调用2:html中通过表单提交来实现调用
Webservice调用3:在C#中发送HttpPost请求来调用WebService中的MyAction方法,代码如下:
二、C#中发送HttpPost请求参数传值的中文乱码处理:
1.客户端参数Base64编码处理 在给postData赋值之前,先对 strData进行Base64编码处理,注意加号(’+‘)的替换处理,否则由于加号经过Url传递后变成空格而得不到合法的Base64字符串,修改代码如下:
2.服务端获取到数据后,先解码再使用。解码的代码如下:
Webservice调用1:浏览器中输入以下URL,然后再返回的页面输入参数,提交实现调用
http://localhost/WebService/MyService.asmx?op=MyAction
Webservice调用2:html中通过表单提交来实现调用
<form id="form1" runat="server" action="http://10.15.223.56/WebService/MyService.asmx/MyAction"> <input type="text" name="strXml" value="<a ObjID=\"9\"></a>" /> <input type="text" name="strData" value="ContactSign|990011|我的数据" /> <input type="submit" value="Send" /> </form>
Webservice调用3:在C#中发送HttpPost请求来调用WebService中的MyAction方法,代码如下:
void UpdateContactSign() { string ServerPage ="http://localhost/WebService/HelloWorld.asmx"; //服务 try { service += "/HelloWorld2"; //Hello 表示方法名 string postData = "username=" + username; //表示传递的参数 // byte[] dataArray = Convert.FromBase64String(postData); System.Text.Encoding encode = System.Text.Encoding.UTF8; byte[] dataArray = encode.GetBytes(postData);//将参数转换为字节数组 HttpWebRequest request =(HttpWebRequest) HttpWebRequest.Create(service); //获取请求 request.Method = "POST"; request.ContentLength = dataArray.Length; request.ContentType = "application/x-www-form-urlencoded"; Stream dataStream = request.GetRequestStream(); //获取输入流 dataStream.Write(dataArray, 0, dataArray.Length); //写入数据 dataStream.Close(); string res = string.Empty; HttpWebResponse response = (HttpWebResponse)request.GetResponse();//获取响应 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);//获取输出流 res = reader.ReadToEnd(); reader.Close(); Console.writeline(res); } catch (Exception ex) { } }
二、C#中发送HttpPost请求参数传值的中文乱码处理:
1.客户端参数Base64编码处理 在给postData赋值之前,先对 strData进行Base64编码处理,注意加号(’+‘)的替换处理,否则由于加号经过Url传递后变成空格而得不到合法的Base64字符串,修改代码如下:
//发送消息到服务器 public string HttpConnectToServer(string ServerPage,string strXml,string strData) { //Base64编码 处理中文乱码 byte[] buffer = Encoding.Default.GetBytes(strData); string Base64StrData = Convert.ToBase64String(buffer).Replace("+", "%2B");//处理加号 string postData = "strXml=" + strXml+"&strData="+Base64StrData; byte[] dataArray = Encoding.Default.GetBytes(postData); //创建请求 ....... ....... return res; }
2.服务端获取到数据后,先解码再使用。解码的代码如下:
public string MyAction(string strXml, string strData) { //Base64解码 byte[] buffer = Convert.FromBase64String(strData); string Data = Encoding.Default.GetString(buffer); //方法实现部分代码中凡用到strData的地方 改为使用解码后的Data ........ ........ }
相关文章推荐
- 解决VM虚拟机连不上网络的问题
- 微软“小冰”识狗与人工神经网络(V)
- 1、linux网络服务实验 用PuTTY连接Linux
- [原]理解HTTP之Content-Type
- Apache Web Server -> httpd 的长连接配置
- JAVA基础_Java网络编程
- 高校网络视频直播流媒体应用
- hdu 5038 (2014北京网络赛G 排序水题)
- Java中HTTP通信
- HTTP协议(二)之HTTP请求
- HTTP 笔记与总结(8)HTTP 与内容压缩
- linux下的防火墙工具TCP Wrappers|Netfilter简介
- Volley和OkHttp并用时导致http header数据被覆盖的bug
- 网络寻路
- 关于网络开发中JSON的使用
- OSI七层网络模型与TCP/IP四层网络模型
- OSI七层网络模型与TCP/IP四层网络模型
- HTTP协议(一)
- linux系统网络命令(七)
- HttpClient模拟浏览器登录后发起请求(携带Cookie发请求)以及网页显示的事件过程