C#: l'Écriture d'un CookieContainer sur le Disque et le Chargement de Retour Pour l'Utilisation
J'ai un CookieContainer
extraite d'un HttpWebRequest/HttpWebResponse session nommée CookieJar. Je veux que mon application pour stocker des cookies entre les courses, de sorte que les cookies collectés dans le CookieContainer
sur une exécution de ce programme sera utilisée la prochaine course, trop.
Je pense que la manière de le faire serait d'une certaine manière d'écrire le contenu d'un CookieContainer sur le disque. Ma question est:
- Comment pouvez-vous écrire un CookieContainer sur le disque? Existe-il des fonctions intégrées pour cela, ou, si non, quelles sont les approches que les gens ont pris? Existe-il des classes disponibles pour simplifier cela?
- Une fois que vous avez écrit un CookieContainer sur le disque, comment faites-vous la charge de l'utilisation?
Mise à JOUR: La première réponse a suggéré sérialisation de la CookieContainer
. Cependant, je ne suis pas très familier avec la façon de sérialiser et désérialiser ces objets complexes. Pourriez-vous donner quelques exemple de code? La suggestion était d'utiliser SOAPFormatter
.
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas essayé mais il a l'attribut Serializable et donc, peut-être [de]sérialisé .net de sérialisation binaire, par exemple SoapFormatter.
Voici l'extrait de code que vous avez demandé.
À la recherche sur le site msdn, il semble SoapFormatter est maintenant obsolète dans .net 3.5 et il vous recommande d'utiliser Binaryformatter. Dans le passé, j'ai trouvé SoapFormatter utile que le fichier est lisible qui aide au diagnostic lors de la désérialisation échoue! Ces formateurs sont sensibles aux changements de version, même dans la version de l'assembly (donc si vous désérialisez avec une version du cadre de mise à niveau le cadre, alors il pourrait ne pas désérialiser, pas sûr), mais il ya des façons de contourner cela avec le Liant de la propriété, si cela devient un problème. Je crois qu'ils sont principalement conçus pour le court terme, la persistance /remoting, mais ils pourraient être assez bon pour vous ici.
La nouvelle DataContractSerializer ne semble pas fonctionner avec elle, de sorte que est sorti.
Une alternative serait d'écrire un CookieContainerData classe [de]sérialiser avec XmlSerializer et manuellement convertir entre cette et CookieContainer.
Ce problème a été m'énerve depuis des lustres, rien de ce que j'ai pu trouver travaillé. J'ai travaillé dessus, afin de mettre cette information dans le monde.
Réponse à l'aide de BinaryFormatter:
C'est intéressant d'avoir cookies au format texte. En plus de pouvoir être utilisé pour écrire sur le disque, il peut être utilisé à d'autres fins.
FONCTIONNE POUR MOI!
Utiliser le
LoadCookiesFromFile
etSaveCookiesToFile
fonctions de charge et l'écriture de cookies sur le disque respectivement.Ou utiliser le
GetCookies
etSetCookies
fonctions pour faire la même chose, mais de les manipuler comme une chaîne de caractères.Une autre alternative est d'utiliser la sérialisation Json (Json.NET):
Une classe avec un cookie:
Ici est de savoir comment sérialiser Json: