zoukankan      html  css  js  c++  java
  • (转)利用http 协议的get 和post

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Collections;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
    
    namespace MyWebServiceTest
    {
    	public class RequestHelper
    	{
    		#region Tip:使用说明
    		//webServices 应该支持Get和Post调用,在web.config应该增加以下代码
    		//<webServices>
    		//  <protocols>
    		//    <add name="HttpGet"/>
    		//    <add name="HttpPost"/>
    		//  </protocols>
    		//</webServices>
    
    		//调用示例:
    		//Hashtable ht = new Hashtable();  //Hashtable 为webservice所需要的参数集
    		//ht.Add("str", "test");
    		//ht.Add("b", "true");
    		//XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://localhost:81/service.asmx", "HelloWorld", ht);
    		//MessageBox.Show(xx.OuterXml);
    		#endregion
    
    		/// <summary>
    		/// 需要WebService支持Post调用
    		/// </summary>
    		public static XmlDocument QueryPostWebService(String URL, String MethodName, Hashtable Pars)
    		{
    			HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);
    			request.Method = "POST";
    			request.ContentType = "application/x-www-form-urlencoded";
    			SetWebRequest(request);
    			byte[] data = EncodePars(Pars);
    			WriteRequestData(request, data);
    			return ReadXmlResponse(request.GetResponse());
    		}
    
    		/// <summary>
    		/// 需要WebService支持Get调用
    		/// </summary>
    		public static XmlDocument QueryGetWebService(String URL, String MethodName, Hashtable Pars)
    		{
    			HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName + "?" + ParsToString(Pars));
    			request.Method = "GET";
    			request.ContentType = "application/x-www-form-urlencoded";
    			SetWebRequest(request);
    			return ReadXmlResponse(request.GetResponse());
    		}
    
    		/// <summary>
    		/// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值
    		/// </summary>
    		public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars)
    		{
    			if (_xmlNamespaces.ContainsKey(URL))
    			{
    				return QuerySoapWebService(URL, MethodName, Pars, _xmlNamespaces[URL].ToString());
    			}
    			else
    			{
    				return QuerySoapWebService(URL, MethodName, Pars, GetNamespace(URL));
    			}
    		}
    
    		private static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars, string XmlNs)
    		{
    			_xmlNamespaces[URL] = XmlNs;//加入缓存,提高效率
    			HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
    			request.Method = "POST";
    			request.ContentType = "text/xml; charset=utf-8";
    			request.Headers.Add("SOAPAction", """ + XmlNs + (XmlNs.EndsWith("/") ? "" : "/") + MethodName + """);
    			SetWebRequest(request);
    			byte[] data = EncodeParsToSoap(Pars, XmlNs, MethodName);
    			WriteRequestData(request, data);
    			XmlDocument doc = new XmlDocument(), doc2 = new XmlDocument();
    			doc = ReadXmlResponse(request.GetResponse());
    
    			XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
    			mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
    			String RetXml = doc.SelectSingleNode("//soap:Body/*/*", mgr).InnerXml;
    			doc2.LoadXml("<root>" + RetXml + "</root>");
    			AddDelaration(doc2);
    			return doc2;
    		}
    		private static string GetNamespace(String URL)
    		{
    			HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL + "?WSDL");
    			SetWebRequest(request);
    			WebResponse response = request.GetResponse();
    			StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    			XmlDocument doc = new XmlDocument();
    			doc.LoadXml(sr.ReadToEnd());
    			sr.Close();
    			return doc.SelectSingleNode("//@targetNamespace").Value;
    		}
    
    		private static byte[] EncodeParsToSoap(Hashtable Pars, String XmlNs, String MethodName)
    		{
    			XmlDocument doc = new XmlDocument();
    			doc.LoadXml("<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"></soap:Envelope>");
    			AddDelaration(doc);
    			//XmlElement soapBody = doc.createElement_x_x("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
    			XmlElement soapBody = doc.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
    			//XmlElement soapMethod = doc.createElement_x_x(MethodName);
    			XmlElement soapMethod = doc.CreateElement(MethodName);
    			soapMethod.SetAttribute("xmlns", XmlNs);
    			foreach (string k in Pars.Keys)
    			{
    				//XmlElement soapPar = doc.createElement_x_x(k);
    				XmlElement soapPar = doc.CreateElement(k);
    				soapPar.InnerXml = ObjectToSoapXml(Pars[k]);
    				soapMethod.AppendChild(soapPar);
    			}
    			soapBody.AppendChild(soapMethod);
    			doc.DocumentElement.AppendChild(soapBody);
    			return Encoding.UTF8.GetBytes(doc.OuterXml);
    		}
    		private static string ObjectToSoapXml(object o)
    		{
    			XmlSerializer mySerializer = new XmlSerializer(o.GetType());
    			MemoryStream ms = new MemoryStream();
    			mySerializer.Serialize(ms, o);
    			XmlDocument doc = new XmlDocument();
    			doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));
    			if (doc.DocumentElement != null)
    			{
    				return doc.DocumentElement.InnerXml;
    			}
    			else
    			{
    				return o.ToString();
    			}
    		}
    
    		/// <summary>
    		/// 设置凭证与超时时间
    		/// </summary>
    		/// <param name="request"></param>
    		private static void SetWebRequest(HttpWebRequest request)
    		{
    			request.Credentials = CredentialCache.DefaultCredentials;
    			request.Timeout = 10000;
    		}
    
    		private static void WriteRequestData(HttpWebRequest request, byte[] data)
    		{
    			request.ContentLength = data.Length;
    			Stream writer = request.GetRequestStream();
    			writer.Write(data, 0, data.Length);
    			writer.Close();
    		}
    
    		private static byte[] EncodePars(Hashtable Pars)
    		{
    			return Encoding.UTF8.GetBytes(ParsToString(Pars));
    		}
    
    		private static String ParsToString(Hashtable Pars)
    		{
    			StringBuilder sb = new StringBuilder();
    			foreach (string k in Pars.Keys)
    			{
    				if (sb.Length > 0)
    				{
    					sb.Append("&");
    				}
    				//sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));
    			}
    			return sb.ToString();
    		}
    
    		private static XmlDocument ReadXmlResponse(WebResponse response)
    		{
    			StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    			String retXml = sr.ReadToEnd();
    			sr.Close();
    			XmlDocument doc = new XmlDocument();
    			doc.LoadXml(retXml);
    			return doc;
    		}
    
    		private static void AddDelaration(XmlDocument doc)
    		{
    			XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
    			doc.InsertBefore(decl, doc.DocumentElement);
    		}
    
    		private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespace
    	}
    }
    

      

  • 相关阅读:
    Appium
    Appium滑动直到页面底部
    使用Maven以及碰到的坑们(持续更新中。。。)
    通过license server激活IntelliJ IDEA
    HDU 1166
    HDU 2444
    HDU 浙江科技学院校赛2016
    HDU 5651
    HDU 5650
    Interview 位运算
  • 原文地址:https://www.cnblogs.com/xj2015/p/5594120.html
Copyright © 2011-2022 走看看