Ich muss dieselbe Sitzungs-ID beibehalten, wenn ich mit C# .Net (wie ein Crawler) über die Seiten einer Website navigiere. Ich fand ein paar Methoden, ein http-Sniffer war sehr praktisch, um zu vergleichen, was mein IE-Browser (HTTP-Anfrage) und vom Webserver (HTTP-Antwort) empfing, da die wichtigen Informationen in den Kopfzeilen (die nicht angezeigt werden) durch den Browser). Bitte verwechseln Sie nicht die Session-ID, die vom Server zum Browser öffentlich ist, und die Session-Variablen des Servers, die für den Server-Code privat sind (wie PHP).C# Sitzungs-ID über httpwebrequest beibehalten
WebHeaderCollection headerCollection = new WebHeaderCollection();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
/* save headers */
for (int i = 0; i < response.Headers.Count; i++)
{
headerCollection.Add(response.Headers.AllKeys[i], response.Headers.Get(i));
}
/* save cookies */
cookieContainer = new CookieContainer();
foreach (Cookie cookie in response.Cookies)
{
cookieContainer.Add(cookie);
}
}
die andere GET oder POST-Anfragen zu machen:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
...
/* restore PHPSESSID */
for (int i = 0; i < headerCollection.Count; i++)
{
string key = headerCollection.GetKey(i);
if (key == "Set-Cookie")
{
key = "Cookie";
}
else
{
continue;
}
string value = headerCollection.Get(i);
request.Headers.Add(key, value);
}
/* restore cookies */
request.CookieContainer = cookieContainer;
/* complete request */
Stream writeStream = request.GetRequestStream()
Mein Wunsch ist mit besserem Code oder zusätzlichen Ideen beizutragen, eine bessere Crawler-Sitzung Erhaltung zu machen.
bitte darum bemühen, Ihren Code zu formatieren. http://stackoverflow.com/editing-help – spender