[C#] Een form post simuleren

Pagina: 1
Acties:

  • JvdS
  • Registratie: December 2003
  • Laatst online: 22-04 19:15
Ik probeer met een WebClient object een aantal form variabelen te posten naar een pagina, zodat ik ingelogd ben en een andere pagina kan uitlezen (http://actueel.hro.nl).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
try
            {
            WebClient client = new WebClient();
           
            Byte[] pageData = client.DownloadData("http://actueel.hro.nl/");

            WebHeaderCollection myWebHeaderCollection = client.ResponseHeaders;

            for (int i=0; i < myWebHeaderCollection.Count; i++)
            {
                MessageBox.Show (myWebHeaderCollection.GetKey(i) +": "+ myWebHeaderCollection.Get(i));
            }

            // Upload some form post values.
            NameValueCollection form = new NameValueCollection();
            
            // Add form data
            form.Add("SubmitDependent", "Login");
            form.Add("usertype","stud");
            form.Add("username","username");
            form.Add("password","password");            

            Byte[] responseData = client.UploadValues("http://actueel.hro.nl/login.asp", form);

            TBOutput.Text = Encoding.ASCII.GetString(responseData);            
            }
            catch (Exception ex)
            {
                MessageBox.Show (ex.Message);
            }


Dit werkt niet, de form data wordt niet gesubmit.
Iemand enig idee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:58
Wat is niet werken ?
Wat heb je zelf al geprobeerd om het op te lossen ?
Wat gebeurt er ?
Heb je al gedebugged ?

https://fgheysels.github.io/


  • JvdS
  • Registratie: December 2003
  • Laatst online: 22-04 19:15
Wat ik terugkrijg is de normale inlog-pagina zonder foutmelding, dus er is niets gepost.
Heb geprobeerd cookies mee te sturen, met daarin asp-sessie, etc. Maar dit werkt ook niet.

[ Voor 35% gewijzigd door JvdS op 06-07-2005 15:12 ]


  • mterwoord
  • Registratie: April 2005
  • Laatst online: 24-04-2025
Je kunt eens kijken naar Indy. Indy is een opensource project dat op verschillende platformen werkt (.NET, Linux, Windows). Het implementeerd meer dan 30 protocollen. zie www.indyproject.org (pas op voor url wrapping)

Indy heeft betere ondersteuning voor http. je kunt zelf uitmaken of je cookies wilt toestaan. Ik denk namelijk dat dat bij jou het probleem is.


Groeten,

Matthijs

  • JvdS
  • Registratie: December 2003
  • Laatst online: 22-04 19:15
Bedankt Matthijs, heb het net geprobeerd met Indy, maar dan crasht het gelijk bij mij.
Zal wel komen omdat ik het nieuwe 2.0 beta .NET framework gebruik en op de website van Indy staat 1.1 vermeld, geen 2.0.

Wil het eigenlijk gewoon oplossen zonder andere assemblies.

  • Ricvdp
  • Registratie: Juni 2005
  • Laatst online: 05-05 11:44
Je kan post headers meesturen in de request headers wanneer je de pagina op zou vragen, dan is er dus automatisch gesubmit.

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 01-05 14:20
Als je gewoon een TCP/IP socket kunt openen is het simpel, door de HTTP-headers te versturen.
[http post-headers]
POST /pagina_om_naar_te_posten.asp HTTP/1.1
Host: domein_naam
Content-type: application/x-www-form-urlencoded
Content-length: string_lengte_van_je_post_string
Connection: close

post_string
[/http post-headers]

Je [post-string] ziet er uit als; veldnaam1=veldwaarde1&veldnaam2=veldwaarde2

  • Norjee
  • Registratie: April 2000
  • Niet online
Dit is wat ik ooit gemaakt hebt. Wel mijn eerste code in c# dus 100% netjes is het niet ;)

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public string doPost(Hashtable waarden , string url)
            {
            logger.Debug(url);
            CookieContainer ccon = new CookieContainer();
            ccon.Add(this.cc);

            HttpWebRequest httpReq = (HttpWebRequest) WebRequest.Create(url);
            httpReq.CookieContainer = ccon;
            httpReq.UserAgent = this.userAgent;
            logger.Debug(httpReq.UserAgent);
            httpReq.Accept = @"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*";
            httpReq.KeepAlive = false;
            httpReq.ProtocolVersion = HttpVersion.Version10;
            httpReq.Referer = url;

             
                if (lastUrl != null)
                {
                httpReq.Referer = lastUrl;  
                }           
                lastUrl = url;
                 
            logger.Info("Referer: "+httpReq.Referer);
            
            if (waarden != null)
            {
                string data = "";
                foreach (DictionaryEntry entry in waarden)
                {
                    data += entry.Key.ToString() + "=" + HttpUtility.HtmlEncode(entry.Value.ToString()) + "&";
                    //Console.WriteLine("-"+data);
                }

                byte[] sendData = Encoding.ASCII.GetBytes(data);
                int sendLength = sendData.Length;

                httpReq.Method = "POST";
                httpReq.ContentLength = sendLength;
                httpReq.ContentType = "application/x-www-form-urlencoded";
                httpReq.Timeout = 100000;
                // send postdata             
                Stream sendStream = httpReq.GetRequestStream();
                sendStream.Write(sendData, 0, sendLength);
                sendStream.Close();
            }

            HttpWebResponse httpResp = (HttpWebResponse) httpReq.GetResponse();
            
            this.cc.Add(httpResp.Cookies);
            StreamReader readStream = new StreamReader(httpResp.GetResponseStream());
            string pagina = readStream.ReadToEnd();
            httpResp.Close();
            logger.Debug(pagina);
            return pagina;
            }

  • JvdS
  • Registratie: December 2003
  • Laatst online: 22-04 19:15
Jouw methode werkte Norjee.
Bedankt allen!
Pagina: 1