Devo conservare lo stesso ID di sessione durante la navigazione sulle pagine di un sito utilizzando C# .Net (come un crawler). Ho trovato un paio di metodi, uno sniffer http è stato molto utile, per confrontare ciò che il mio browser IE stava inviando (richiesta HTTP) e ricevendo dal server web (risposta HTTP), poiché le informazioni importanti sono nelle intestazioni (che non vengono visualizzate dal browser). Si prega di non creare confusione tra l'ID di sessione che è pubblico dal server al browser e le variabili di sessione del server che sono private al codice del server (come php).C# mantiene l'ID di sessione su httpwebrequest
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);
}
}
per rendere le altre richieste GET o POST:
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()
La mia richiesta è quello di contribuire con il codice migliore, o ulteriori idee per rendere una migliore sessione di crawler preservare.
si prega di fare uno sforzo per formattare il codice. http://stackoverflow.com/editing-help – spender