【问题标题】:.net post form in code behind.net 在后面的代码中发布表单
【发布时间】:2012-07-08 19:16:16
【问题描述】:

我想在后面的代码中制作一个帖子表单。我有一个简单的 html 帖子正在工作,但是当我尝试使它成为 WebRequest 时,我无法使它工作。

提前感谢您的时间。

这是有效的>

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

【问题讨论】:

  • #3 看起来差不多完成了...添加 req.Method = "POST";
  • #1 和 #2 没有按照服务器的预期发布正确的表单。

标签: c# .net


【解决方案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);

【讨论】:

  • 我同意,WebClient 对于初学者来说可能会容易得多。
  • Mert,如果对你有帮助,请告诉我。
  • 刚刚对迟到的回答感到抱歉,响应是“\n”,这意味着我们无法使其工作:(我也不应该在某些地方指定“datafromuser”吗?
  • 你想发出post请求,所以你不能在url中输入参数。请提供你的代码,你到底写了什么。
  • 我只是编辑我的问题,我猜实验 1 是你的解决方案
【解决方案2】:

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

 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

【讨论】:

  • byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(ali); WebRequest req = WebRequest.Create("http:...); req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = byteArray.Length; 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(); GetrequestStream 线游戏错误 > 无法发送带有此动词类型的内容主体。
  • @Mert - 请用你的新代码更新你的答案,而不是覆盖旧的东西......只需将其附加到底部,如“编辑 - 尝试以下并得到错误
  • @Mert - 看起来您没有设置“POST”的请求方法。你有没有从你的代码中删除它??
  • 就像一个魅力!谢谢大家 :) 我不能感谢更多。真的很感激。
【解决方案3】:

这是一个简单的例子。 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();

您可以使用 Fiddler 来捕捉 postData 的外观。

【讨论】:

  • POSTDATA>名称=莫特和密码= 123&客户端Id = 1058&ip地址= 213.456.654.456&ADRESS = asdsa&的OrderId = 123&类型=验证&总数= 4522115422659661&ExpiresAy = 01&ExpiresYil = 13&Cvv2Val = 123&总计= 10&Taksit = 1&的Kdv = 18&BankaID = 1&TcKimlik = 12345678912 responseString> \ n没用:(
  • 你能给我一个你想通过代码做http post的URL吗?
  • 这是发布别人的例子的问题。 @Mert,您需要使用您的元素名称,即“datafromuser={文本区域中的所有内容}”
  • Danilo Vulović on top 问题你可以找到工作的 html 示例,那里有你需要的一切。谢谢
【解决方案4】:

像这样试试。

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

【讨论】:

猜你喜欢
  • 2012-12-15
  • 1970-01-01
  • 2018-03-05
  • 2017-12-02
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
相关资源
最近更新 更多