.net后面的代码表单
我想在后面的代码中创建一个post。 我有简单的htmlpost正在工作但是当我尝试使它成为WebRequest我无法使它工作。
在此先感谢您的时间。
这是工作>
Untitled Page
这不起作用>
String ali = "Mert123xxxx213asdsa" + "123Auth12345678912345670113123" + "10xx112345678912"; WebRequest req = WebRequest.Create("http://www.pay-pos.com/test.php?datafromuser=" + ali); req.Credentials = CredentialCache.DefaultCredentials; req.Method = "POST"; HttpWebResponse loWebResponse = (HttpWebResponse)req.GetResponse(); Encoding enc = Encoding.GetEncoding(1254); StreamReader loResponseStream = new StreamReader(loWebResponse.GetResponseStream(), enc); string lcHtml = loResponseStream.ReadToEnd(); loWebResponse.Close(); loResponseStream.Close();
编辑:实验1
String postData = "Name=Mert" + "&Password=123" + "&ClientId=1058" + "&IPAddress=213.456.654.456" + "&Adress=asdsa" + "&OrderId=123" + "&Type=Auth" + "&Number=4522115422659661" + "&ExpiresAy=01" + "&ExpiresYil=13" + "&Cvv2Val=123" + "&Total=10" + "&Taksit=1" + "&Kdv=18" + "&BankaID=1" + "&TcKimlik=12345678912"; string URI = "http://www.pay-pos.com/test.php"; WebClient wc = new WebClient(); wc.Headers["Content-type"] = "application/x-www-form-urlencoded"; string HtmlResult = wc.UploadString(URI, postData);
实验2
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.pay-pos.com/test.php"); request.Method = WebRequestMethods.Http.Post; request.ContentLength = postData.Length; request.ContentType = "application/x-www-form-urlencoded"; request.KeepAlive = false; //also tried true as well StreamWriter writer = new StreamWriter(request.GetRequestStream()); writer.Write(postData); writer.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); String responseString = reader.ReadToEnd(); response.Close();
实验3 !!!工作!!!
String ali = "datafromuser=Mert1231058213.456.654.456asdsa123Auth" + "4522115422659661011312310181"+ "12345678912"; byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(ali); WebRequest req = WebRequest.Create("http://www.pay-pos.com/test.php"); req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = byteArray.Length; req.Method = "POST"; Stream dataStream = req.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); HttpWebResponse response = (HttpWebResponse)req.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); String responseString = reader.ReadToEnd(); response.Close();
我看错的第一件事是你试图使用查询字符串来发布表单数据。 您的“表单数据”应如下所示:
String ali = "datafromuser=Mert 123 xxxx 213 asdsa " + "123 Auth 1234567891234567 01 13 123 " + "10 xx 1 12345678912 ";
接下来,您需要从表单数据中获取bytes []。
byte[] byteArray = Encoding.UTF8.GetBytes(ali);
设置一些标题:
req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = byteArray.Length; req.Method = "POST";
现在将数据写入请求流。
Stream dataStream = req.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close();
最后……得到你的回复。 另请注意,实现IDisposable的任何内容都应该包含在using
语句中,即Stream
和WebResponse
。
另请注意,提交按钮不是表单发布数据的一部分。 服务器可能会期待它。
编辑:这是Microsoft的一个完整示例,它将指导您一步一步。
这可能对你有帮助。
string URI = "http://www.myurl.com/post.php"; string myParamters = "param1=value1¶m2=value2"; WebClient wc = new WebClient(); wc.Headers["Content-type"] = "application/x-www-form-urlencoded"; string HtmlResult = wc.UploadString(URI, myParameters);
这是一个简单的例子。 postData取决于forms
String postData = "Name=" + Username + "&Password=" + Password + "&Retype=" + Password + "&Email=" + HttpUtility.UrlEncode(EmailAddress) + "&RealName=" + String.Format("{0}+{1}", FirstName.Replace(" ", "+"), LastName.Replace(" ", "+"));
现在创建请求和发布数据:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = WebRequestMethods.Http.Post; request.ContentLength = postData.Length; request.ContentType = "application/x-www-form-urlencoded"; request.KeepAlive = false; StreamWriter writer = new StreamWriter(request.GetRequestStream()); writer.Write(postData); writer.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); String responseString = reader.ReadToEnd(); response.Close();
您可以使用Fiddler来捕获postData的外观。
试试这样吧。
using (WebClient client = new WebClient()) { byte[] response = client.UploadValues("http://dork.com/service", new NameValueCollection() { { "home", "Cosby" }, { "favorite+flavor", "flies" } }); }
您将需要这些包括:
using System; using System.Collections.Specialized; using System.Net;
如果您坚持使用静态方法/类:
public static class Http { public static byte[] Post(string uri, NameValueCollection pairs) { byte[] response = null; using (WebClient client = new WebClient()) { response = client.UploadValues(uri, pairs); } return response; } }
那简单地说:
Http.Post("http://dork.com/service", new NameValueCollection() { { "home", "Cosby" }, { "favorite+flavor", "flies" } });