Onthoud authenticatie met webverzoek

Ik maak een programma dat de gegevens van een site verzamelt die moet worden geverifieerd. Ik maak het programma in een console, dus ik kan de bedieningselementen niet gebruiken.

Ik kan de gebruikersgegevens naar het inlogformulier sturen en de informatie van het welkomstscherm opvragen. Maar toen ik nog een verzoek stuurde, vergat de site dat ik me ooit heb aangemeld. Ik las dat ik op een of andere manier cookies moest inschakelen, maar ik heb het nog niet uitgewerkt.

Dit is mijn code:

public string GetResponse()
{
   //Build a string containing all the parameters
    string Parameters = string.Empty;
    foreach (string p in theQueryData)
    {
        Parameters += string.Format("&{0}", p);
    }

    if (Parameters.Length > 0)
        Parameters = Parameters.Substring(1);

   //Create a request using a URL that can receive a post. 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.url);

   //Set the Method property of the request to POST.
    request.Method = this.method;
   //Create POST data and convert it to a byte array.
    string postData = Parameters;
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
   //Set the ContentType property of the WebRequest.
    request.ContentType = "application/x-www-form-urlencoded";
   //Set the ContentLength property of the WebRequest.
    request.ContentLength = byteArray.Length;
   //Get the request stream.
    Stream dataStream = request.GetRequestStream();
   //Write the data to the request stream.
    dataStream.Write(byteArray, 0, byteArray.Length);
   //Close the Stream object.
    dataStream.Close();
   //Get the response.
    WebResponse response = request.GetResponse();
   //Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream();
   //Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader(dataStream);
   //Read the content.
    string responseFromServer = reader.ReadToEnd();
   //Clean up the streams.
    reader.Close();
    dataStream.Close();
    response.Close();

    return responseFromServer;
}

Dit zijn de koppen die door het verzoek worden geretourneerd:

Connection: keep-alive
Vary: Accept-Encoding
Content-Length: 7628
Cache-Control: private
Content-Type: text/html
Date: Tue, 06 Dec 2011 20:58:21 GMT
Set-Cookie: plaza%5Fmasteraccount=; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Fvacmode=R; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; pa
th=/,plaza%5Fname=%16%05%0C%0E%15%09%18%21QRQ; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Flocked=R; expires=Tue, 06-Dec-2011 23:00:00 GMT; d
omain=; path=/,plaza%5Flogin=%16%05%0C%0E%15%09%18%21QRQ; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Fid=S%5ENWNSQPP%40%15%08%0C%0E%15%09%18%
21QRQ%15%08%0C%0E%15%09%18%21QRQRQQ; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Fmid=1323205117; expires=Sun, 25-Nov-2012 23:00:00 GMT; path=
/,plaza%5Fstatus=Q; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,ASPSESSIONIDSQCRSDDR=NKHJIBADOGALNGKDBALDJBIA; path=/
Server: nginx
X-Powered-By: ASP.NET
0
Er is echt niet genoeg om hierop een volledig antwoord te geven. Wat u echt moet doen, is de cookieverzameling opnemen die terugkomt in het antwoord in de volgende verzoeken. Ik heb echter geen idee op basis van deze code wat het formaat of de inhoud van die cookie zou moeten zijn.
toegevoegd de auteur Garrett Vlieger, de bron
Ik heb de http-headers aan mijn vraag toegevoegd.
toegevoegd de auteur Jerodev, de bron
je moet de cookies in de antwoordkop lezen ... bewaar ze en verzend ze met daaropvolgende verzoeken.
toegevoegd de auteur John Sobolewski, de bron

1 antwoord

U moet een cookie-container toevoegen.

CookieContainer cookieContainer = new CookieContainer();
// Create a request using a URL that can receive a post. 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.url);
request.CookieContainer = cookieContainer;

//DO your request that sets cookies from the server.
.........

//Place another request with the cookies
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(someNewUrl);
request.CookieContainer = cookieContainer;
//this should have cookies from the previous request, which should keep you logged in.
3
toegevoegd
Dit werkte perfect, heel erg bedankt.
toegevoegd de auteur Jerodev, de bron