2009-08-31 9 views
1

Je suis en train de me connecter à mon compte eBay en utilisant le code suivant:Connexion à eBay en utilisant HttpWebRequest

string signInURL = "https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerid=2&siteid=0&UsingSSL=1"; 
string postData = String.Format("MfcISAPICommand=SignInWelcome&userid={0}&pass={1}", "username", "password"); 
string contentType = "application/x-www-form-urlencoded"; 
string method = "POST"; 
string userAgent = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"; 

CookieContainer cookieContainer = new CookieContainer(); 

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(signInURL); 
req.CookieContainer = cookieContainer; 
req.Method = method; 
req.ContentType = contentType; 
req.UserAgent = userAgent; 
ASCIIEncoding encoding = new ASCIIEncoding(); 
byte[] loginDataBytes = encoding.GetBytes(postData); 
req.ContentLength = loginDataBytes.Length; 
Stream stream = req.GetRequestStream(); 
stream.Write(loginDataBytes, 0, loginDataBytes.Length); 
stream.Close(); 
HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 
StreamReader xsr = new StreamReader(res.GetResponseStream()); 
String responseText = xsr.ReadToEnd(); 

substituant Il est évident que mon nom d'utilisateur et mot de passe réel - mais quand je regarde la chaîne responseText, Je vois qu'une partie de la réponse d'eBay est «Le navigateur que vous utilisez rejette les cookies». - Des idées que je fais mal?

P.S. Et oui, j'utilise aussi l'API eBay, mais c'est pour quelque chose de légèrement différent de ce que je veux faire avec l'API.

Répondre

1

Vous effectuez une requête HTTP directe. Le site Ebay a la fonctionnalité de parler à un navigateur (probablement pour stocker le cookie de session). À moins que vous ne rendiez le code de requête assez intelligent pour utiliser correctement les cookies, cela ne fonctionnera pas. Vous devrez probablement utiliser l'objet Internet Explorer à la place.

0

Vous devez intercepter le trafic http pour voir exactement ce qui s'est passé. J'utilise Fiddler2. Ce sont les bons outils pour déboguer http. Donc, je peux savoir qui a tort, mon application ou le serveur web distant. En utilisant fiddler, vous pouvez voir l'en-tête de la requête, l'en-tête de réponse avec ses cookies ainsi que le contenu de la réponse. Il a utilisé au milieu de votre application et l'Ebay.

Basé sur mon expérience. Je pense que c'est parce que le cookie Ebay envoyé à vous n'est pas renvoyé au serveur Ebay. Fiddler le prouvera que oui ou non.

Autre chose, le cookie de réponse que vous recevez doit être renvoyé à la prochaine demande en utilisant le même CookieContainer.

Vous devriez remarquer que CookieContainer a un bug sur la méthode .Add (Cookie) et .GetCookies (uri). Vous ne pouvez pas l'utiliser, mais les codes internes peuvent l'utiliser.

Voir les détails et fixer ici:

http://dot-net-expertise.blogspot.com/2009/10/cookiecontainer-domain-handling-bug-fix.html

CallMeLaNN

1

Avant de faire le POST, vous devez télécharger la page avec le formulaire que vous soumettez dans votre code, prenez le cookie qu'ils donnez-le, mettez-le dans votre CookieContainer (en vous assurant d'obtenir le bon chemin) et postez-le dans votre demande. Pour clarifier, même si vous POSTez les données correctes, vous n'envoyez pas le cookie qui doit l'accompagner. Vous obtiendrez ce cookie depuis la page de connexion.