3

I wanna make a post form in code behind. I have simple html post is working but when I try make it WebRequest I can't make it work.

Thanks for you time in advance.

this is working >

<!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>

This isn't working >

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

EDIT: EXPERIMENT 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);

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

EXPERIMENT 3 !!!WORKING!!!

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();
Mert
  • 6,432
  • 6
  • 32
  • 68

4 Answers4

5

The first thing I see wrong is that you're trying to use a query string to post the form data. Your "form data" should be like so:

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

Next, you need to get the bytes[] from your form data.

byte[] byteArray = Encoding.UTF8.GetBytes(ali);

Set some headers:

req.ContentType = "application/x-www-form-urlencoded"; 
req.ContentLength = byteArray.Length;
req.Method = "POST"; 

Now write your data to the request stream.

Stream dataStream = req.GetRequestStream(); 
dataStream.Write(byteArray, 0, byteArray.Length); 
dataStream.Close(); 

Finally... get your response. Also note, anything that implements IDisposable should be wrapped in a using statement, i.e. Stream and WebResponse.

Also note that the submit button is not part of your form post data. It's possible the server is expecting it.

Edit: Here's a complete example from Microsoft that guides you step by step.

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

Chris Gessler
  • 22,727
  • 7
  • 57
  • 83
  • 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 line game error > Cannot send a content-body with this verb-type. – Mert Jul 09 '12 at 12:13
  • @Mert - please update your answer with your new code, not overwriting the old stuff... just append it to the bottom like "Edit - tried the following and got error – Chris Gessler Jul 09 '12 at 12:18
  • @Mert - it looks like you didn't set your request Method of "POST". Did you delete it from your code?? – Chris Gessler Jul 09 '12 at 12:22
  • works like a charm! thanks guys :) I can't thank more than this. really appreciated. – Mert Jul 09 '12 at 12:34
1

This might help you.

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);
Jitendra Pancholi
  • 7,897
  • 12
  • 51
  • 84
1

This is simples example. postData depends of form

String postData = "Name=" + Username +
              "&Password=" + Password +
              "&Retype=" + Password +
              "&Email=" + HttpUtility.UrlEncode(EmailAddress) +
              "&RealName=" + String.Format("{0}+{1}", FirstName.Replace(" ", "+"), LastName.Replace(" ", "+"));

Now create request and post data:

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

You can use Fiddler in order to catch how postData looks.

Danilo Vulović
  • 2,983
  • 20
  • 31
  • 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 didn't work :( – Mert Jul 09 '12 at 12:08
  • Can you give me URL for which you want to do http post via code? – Danilo Vulović Jul 09 '12 at 12:12
  • This is the problem with posting someone else's example. @Mert, you need to use your element names, i.e. "datafromuser={everything in the text area}" – Chris Gessler Jul 09 '12 at 12:15
  • Danilo Vulović on top Question you can find working html example there is everything you need. thanks – Mert Jul 09 '12 at 12:26
0

Try like this.

using (WebClient client = new WebClient())
   {

       byte[] response = client.UploadValues("http://dork.com/service", new NameValueCollection()
       {
           { "home", "Cosby" },
           { "favorite+flavor", "flies" }
       });
   }

You will need these includes:

using System;
using System.Collections.Specialized;
using System.Net;

If you're insistent on using a static method/class:

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

Then simply:

Http.Post("http://dork.com/service", new NameValueCollection() {
    { "home", "Cosby" },
    { "favorite+flavor", "flies" }
});
Jitendra Pancholi
  • 7,897
  • 12
  • 51
  • 84