c# 发送post请求到服务器,并解析得到的xml格式的字符串

本文展示了如何使用C#发送HTTP POST请求到服务器,并解析返回的XML格式字符串。通过设置请求头,传递参数,获取响应,然后利用XmlDocument解析XML数据,提取所需信息。
  1. 以下是 HTTP POST 请求和响应示例。所显示的占位符需替换为实际值。
  2. POST /web/FileService.asmx/DoAction HTTP/1.1
  3. Host: www.***.com
  4. Content-Type: application/x-www-form-urlencoded
  5. Content-Length: length
  6. proxyId=string&action=string

     有网站,如www.***.com上有一个webservice接口,比如DoAction,客户端发送请求之后,返回跟某个ID相关的一些信息,比如文件列表等,客户端发送代码,解析代码如下:

 

网站支持httppost方法,如上的代码,返回结果实例如下,

  1. HTTP/1.1 200 OK
  2. Content-Type: text/xml; charset=utf-8
  3. Content-Length: length
  4. <?xml version="1.0" encoding="utf-8"?>
  5. <string xmlns="http://www.***.com/">string</string>

 在客户端(web)上发送代码:

  1.             string service = "http://www.***.com/web/FileService.asmx/DoAction";
  2.             string contenttype = "application/x-www-form-urlencoded";//更网站该方法支持的类型要一致
  3. //根据接口,写参数
  4.             string para = "proxyId=123456";
  5.             para += "&action=*************";
  6.             //发送请求
  7.             HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(service);
  8.             myRequest.Method = "POST";
  9.             myRequest.ContentType = contenttype;
  10.             myRequest.ContentLength = para.Length;
  11.             Stream newStream = myRequest.GetRequestStream();
  12.             // Send the data.
  13.             ASCIIEncoding encoding = new ASCIIEncoding();
  14.             byte[] postdata = encoding.GetBytes(para);
  15.             newStream.Write(postdata, 0, para.Length);
  16.             newStream.Close();
  17.             // Get response
  18.             HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  19.             StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  20.             string content = reader.ReadToEnd();//得到结果

上面的content就是返回的字符串结果,可能是这样子的:

  1.     <string xmln="www.***.com">
  2.     <WSResponse>
  3.     <Result>0</Result>
  4.     <Data>
  5.     <filelist>
  6.     <Item  ID=/"1/" URL=/"******/"/>
  7.     <Item  ID=/"2/" URL=/"******/"/>
  8.     </filelist>
  9.     </Data>
  10.     </WSResponse>
  11.     </string>

然后利用XmlDocument等解析结果:

  1. //解析接口返回值,这里选用XML格式的解析          
  2. XmlDocument xmlDoc = new XmlDocument();
  3. string xmlrespons = "";
  4. xmlDoc.LoadXml(content);
  5. XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
  6. nsmgr.AddNamespace("""http://ws.95013.com/");//这个要跟string后面的xmln的字符串一致
  7. XmlElement root = xmlDoc.DocumentElement;
  8. xmlrespons = root.InnerText;
  9. byte[] byteSource = Encoding.GetEncoding("utf-8").GetBytes(xmlrespons);   
  10. MemoryStream ms = new MemoryStream(byteSource);   
  11. XmlTextReader xmlreader=new XmlTextReader(ms);   
  12. string sname,svalue;
  13. while(xmlreader.Read())   
  14. {   
  15.     if(xmlreader.NodeType == XmlNodeType.Element)
  16.     {
  17.     if ("Item".Equals(xmlreader.Name))
  18.     {
  19.         while (xmlreader.MoveToNextAttribute())
  20.         {
  21.         switch (xmlreader.Name)
  22.         {
  23.         case "ID":
  24.         //做操作 
  25.                 string str1=xmlreader.Value;
  26.         break;
  27.         case "URL":
  28.         string str2= xmlreader.Value; 
  29.         break;
  30.         ...                             default:
  31.         break;
  32.         }
  33.          }
  34.          xmlreader.MoveToElement();//读完一个几点后要让指针后移
  35.     }
  36.      }
  37.      if ("Result".Equals(xmlreader.Name))
  38.      {//对resault结点的解析
  39.     svalue = xmlreader.ReadString();
  40.         ...
  41.       }
  42. }
  43. //解析完了将释放变量    
  44. xmlreader.Close();   
  45. ms.Close(); 
C#中,使用`HttpClient`发送POST请求携带XML数据可以按以下步骤实现。首先需要将数据序列化为XML格式,然后通过`HttpClient`发送请求。 以下是一个示例代码,展示了如何使用`HttpClient`发送POST请求携带XML数据: ```csharp using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; // 假设这是要发送数据类 public class Patient { public string Name { get; set; } public int Age { get; set; } } // 辅助类用于序列化对象为XML public static class XmlHelper { public static string Serilize(object obj) { var serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType()); using (var writer = new System.IO.StringWriter()) { serializer.Serialize(writer, obj); return writer.ToString(); } } } class Program { static async Task Main() { // 创建要发送数据对象 var patient = new Patient { Name = "John Doe", Age = 30 }; // 序列化数据XML var send = XmlHelper.Serilize(patient); // 创建StringContent对象,设置内容类型为application/xml StringContent formContent = new StringContent(send, Encoding.Default, "application/xml"); // 创建HttpClient实例 HttpClient httpClient = new HttpClient(); // 设置最大响应内容缓冲区大小 httpClient.MaxResponseContentBufferSize = 256000; // 目标URL string Url = "https://example.com/api/endpoint"; // 发送POST请求 HttpResponseMessage response = await httpClient.PostAsync(new Uri(Url), formContent); // 设置接收参数格式 var contentType = response.Content.Headers.ContentType; if (string.IsNullOrEmpty(contentType.CharSet)) { contentType.CharSet = "GBK"; } // 请求接收参数 var result = await response.Content.ReadAsStringAsync(); // 判断返回参数是否成功 if (response.StatusCode != System.Net.HttpStatusCode.OK) { // 处理请求失败的情况 } Console.WriteLine(result); } } ``` 在上述代码中,首先定义了一个`Patient`类来表示要发送数据。`XmlHelper`类用于将对象序列化为XML字符串。然后创建`HttpClient`实例,设置请求内容为XML格式发送POST请求。最后处理响应结果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值