2012-07-09 89 views
3

我想在后面的代码中发表帖子。我有简单的HTML文章正在工作,但是当我尝试使WebRequest我无法使其工作。.net post form in code behind

感谢您的时间提前。

这是工作>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
    <title>Untitled Page</title> 
</head> 
<body> 
<form action="http://www.pay-pos.com/test.php" method="post"> 
<textarea name="datafromuser"> 
<CC5Request><Name>Mert</Name><Password>123</Password><ClientId>1058</ClientId><IPAddress>213.456.654.456</IPAddress><Adress>asdsa</Adress><OrderId>123</OrderId><Type>Auth</Type> 
<Number>4522115422659661</Number><ExpiresAy>01</ExpiresAy><ExpiresYil>13</ExpiresYil><Cvv2Val>123</Cvv2Val><Total>10</Total><Taksit></Taksit><Kdv>18</Kdv><BankaID>1</BankaID> 
<TcKimlik>12345678912</TcKimlik></CC5Request> 
</textarea> 
<input type="submit" value="aaa" /> 
</form> 
</body> 
</html> 

这不是工作>

String ali = "<CC5Request><Name>Mert</Name><Password>123</Password><ClientId>xxxx</ClientId><IPAddress>213</IPAddress><Adress>asdsa</Adress>" + 
         "<OrderId>123</OrderId><Type>Auth</Type><Number>1234567891234567</Number><ExpiresAy>01</ExpiresAy><ExpiresYil>13</ExpiresYil><Cvv2Val>123</Cvv2Val>" + 
         "<Total>10</Total><Taksit></Taksit><Kdv>xx</Kdv><BankaID>1</BankaID><TcKimlik>12345678912</TcKimlik></CC5Request>"; 
        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=<CC5Request><Name>Mert</Name><Password>123</Password><ClientId>1058</ClientId><IPAddress>213.456.654.456</IPAddress><Adress>asdsa</Adress><OrderId>123</OrderId><Type>Auth</Type>" + 
"<Number>4522115422659661</Number><ExpiresAy>01</ExpiresAy><ExpiresYil>13</ExpiresYil><Cvv2Val>123</Cvv2Val><Total>10</Total><Taksit></Taksit><Kdv>18</Kdv><BankaID>1</BankaID>"+ 
"<TcKimlik>12345678912</TcKimlik></CC5Request>"; 

      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(); 
+0

# 3看起来接近完成... add req.Method =“POST”; – 2012-07-09 12:28:58

+0

#1和#2没有发布正确的表单,因为服务器期望。 – 2012-07-09 12:31:13

回答

5

我看到错误的第一件事就是您尝试使用查询字符串发布表单数据。你的“表单数据”应该是这样的:

String ali = "datafromuser=<CC5Request><Name>Mert</Name><Password>123</Password><ClientId>xxxx</ClientId><IPAddress>213</IPAddress><Adress>asdsa</Adress>" + 
          "<OrderId>123</OrderId><Type>Auth</Type><Number>1234567891234567</Number><ExpiresAy>01</ExpiresAy><ExpiresYil>13</ExpiresYil><Cvv2Val>123</Cvv2Val>" + 
          "<Total>10</Total><Taksit></Taksit><Kdv>xx</Kdv><BankaID>1</BankaID><TcKimlik>12345678912</TcKimlik></CC5Request>"; 

接下来,你需要从表单数据中获取字节[]。

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声明中,即StreamWebResponse

另请注意,提交按钮不是您的表单发布数据的一部分。服务器可能期待它。

编辑:下面是来自Microsoft的完整示例,它将逐步引导您。

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

+0

byte [] byteArray = System.Text.Encoding.UTF8.GetBytes(ali); WebRequest req.ContentType =“application/x-www-form-urlencoded”; req.ContentLength = byteArray.Length; Stream dataStream = req.GetRequestStream(); dataStream.Write(byteArray,0,byteArray.Length); dataStream.Close(); HttpWebR esponse response =(HttpWebResponse)req.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); String responseString = reader.ReadToEnd(); response.Close(); GetrequestStream线路游戏错误>无法用此动词类型发送内容主体。 – Mert 2012-07-09 12:13:09

+0

@Mert - 请用你的新代码更新你的答案,而不是覆盖旧的东西......只是将它附加到底部,就像“编辑 - 尝试以下并得到错误<你的错误在这里> – 2012-07-09 12:18:36

+0

好的,我会感谢 – Mert 2012-07-09 12:20:23

1

这可能对你有帮助。

string URI = "http://www.myurl.com/post.php"; 
string myParamters = "param1=value1&param2=value2"; 

WebClient wc = new WebClient(); 
wc.Headers["Content-type"] = "application/x-www-form-urlencoded"; 
string HtmlResult = wc.UploadString(URI, myParameters); 
+1

我同意,WebClient对初学者来说可能会容易得多。 – 2012-07-09 11:58:57

+0

默特尔,请让我知道它是否对你有帮助。 – 2012-07-09 12:02:13

+0

刚刚尝试抱歉,迟到的答案,答案是“\ n”这意味着我们不能使它的工作:(也不应该我指定“datafromuser”在某些? – Mert 2012-07-09 12:19:01

0

这是simples例子。 POSTDATA取决于形式

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(); 

可以为了赶POSTDATA看起来如何使用Fiddler。

+0

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 responseString > \ n没有工作:( – Mert 2012-07-09 12:08:47

+0

你可以给我的URL你想通过代码做http发布吗? – 2012-07-09 12:12:18

+0

这是问题发布别人的例子。 @Mert,你需要使用你的元素名称,即“datafromuser = {文本区域中的所有内容}” – 2012-07-09 12:15:17

0

试试这个。

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" } 
}); 
+0

Ref Url:http://stackoverflow.com/questions/4088625/net-simplest-way-to-send-post-with-data-and-read-response for above – 2012-07-09 12:37:06