0
Dim doc As New XmlDocument
doc.Load("http://www.example.com/?paramx=1¶my=2")
非常適合查詢字符串中的GET查詢。但是說我想POST paramx = 1 & paramy = 2到http://www.example.com並獲得XML中的響應。我會怎麼做?將數據POST到XML服務aspx vb
Dim doc As New XmlDocument
doc.Load("http://www.example.com/?paramx=1¶my=2")
非常適合查詢字符串中的GET查詢。但是說我想POST paramx = 1 & paramy = 2到http://www.example.com並獲得XML中的響應。我會怎麼做?將數據POST到XML服務aspx vb
下面是一個輔助類,我用於將數據發佈到網站,然後返回XML - 希望它有幫助。
用法:
var resultXmlDoc = new HttpHelper().PostXml("http://www.test.com", new { paramName = "value", paramName2="value2" });
Helper類:
internal class HttpHelper
{
public XDocument PostXml(string baseUrl, IDictionary<string, string> cgiParams)
{
return XDocument.Load(Post(baseUrl, cgiParams).GetResponseStream());
}
public XDocument PostXml(string baseUrl, params object[] items)
{
return XDocument.Load(Post(baseUrl, items).GetResponseStream());
}
public XDocument PostXml(string url, string topost)
{
return XDocument.Load(Post(url, topost).GetResponseStream());
}
protected virtual HttpWebResponse Post(string url, string postString)
{
if (url == null)
throw new ArgumentNullException("baseUrl");
Uri uri;
if (!Uri.TryCreate(url, UriKind.Absolute, out uri))
throw new ArgumentException("url is not a valid Uri");
var req = (HttpWebRequest)WebRequest.Create(url);
// if the target site issues a session cookie, you need to store it and append it here
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
var bytes = System.Text.Encoding.ASCII.GetBytes(postString);
req.ContentLength = bytes.Length;
using(var str = req.GetRequestStream())
str.Write(bytes, 0, bytes.Length);
return (HttpWebResponse)req.GetResponse();
}
protected virtual HttpWebResponse Post(string url, params object[] items)
{
var x = items.SelectMany(i =>
{
return i.GetType().GetProperties().Select(p => new Tuple<string, string>(p.Name, p.GetValue(i, null) != null ? p.GetValue(i, null).ToString() : ""));
});
var d = new Dictionary<string, string>();
foreach (var p in x)
d[p.Item1] = p.Item2;
return Post(url, d);
}
protected virtual HttpWebResponse Post(string baseUrl, IDictionary<string, string> cgiParams)
{
if (baseUrl == null)
throw new ArgumentNullException("baseUrl");
Uri uri;
if (!Uri.TryCreate(baseUrl, UriKind.Absolute, out uri))
throw new ArgumentException("baseUrl is not a valid Uri");
string postString = string.Empty;
if (cgiParams != null && cgiParams.Count > 0)
{
foreach (var k in cgiParams.Keys)
postString += HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(cgiParams[k]) + "&";
postString = postString.Substring(0, postString.Length - 1);
}
return Post(baseUrl, postString);
}
}
您將需要使用HttpWebRequest和響應我猜。很好的示例在這裏:http://p2p.wrox.com/asp-net-1-0-1-1-professional/57098-c-post-xml-using-httpwebrequest-response.html – Yeronimo 2013-05-01 11:04:14
如果你問如何從HTML發佈並獲得XML響應,您可以使用表單方法POST提交或AJAX發佈。在服務器端,您可能會使用Yeronimo所說的,因爲我不在ASP.NET中。 – IndoKnight 2013-05-01 11:14:25
偉大的@yeromino我在尋找的關鍵詞是「httpwebrequest」,這裏有很多關於vb的教程,你的例子是針對c#的,但這很酷。謝謝。 – bendecko 2013-05-01 11:21:58