Вход в eBay с помощью HttpWebRequest - PullRequest
1 голос
/ 31 августа 2009

Я пытаюсь войти в свою учетную запись eBay, используя следующий код:

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();

Очевидно, подставляя мои настоящие имя пользователя и пароль - но когда я смотрю на строку responseText, я вижу, что часть ответа от eBay - «Используемый вами браузер отклоняет файлы cookie». - Есть идеи, что я делаю не так?

P.S. И да, я также использую API eBay, но это немного отличается от того, что я хочу сделать с API.

Ответы [ 3 ]

1 голос
/ 30 мая 2011

Перед выполнением POST вам необходимо скачать страницу с формой, которую вы отправляете в своем коде, взять куки, которые они вам дают, поместить их в CookieContainer (убедившись, что вы правильно указали путь) и опубликовать его резервное копирование в вашем запросе.

Чтобы уточнить, что, возможно, вы размещаете правильные данные, вы не отправляете файл cookie, который необходимо использовать вместе с ним. Вы получите этот файл cookie со страницы входа в систему.

1 голос
/ 31 августа 2009

Вы делаете прямой http-запрос. На сайте Ebay есть функциональные возможности для общения с браузером (возможно, для хранения cookie сессии). Если вы не сделаете код запроса достаточно умным, чтобы правильно использовать куки, он не будет работать. Вам, вероятно, придется использовать объект Internet Explorer.

0 голосов
/ 08 октября 2009

Вам необходимо перехватить http-трафик, чтобы увидеть, что именно произошло. Я использую Fiddler2. Это хороший инструмент для отладки http. Так что я могу знать, кто не прав, мое приложение или удаленный веб-сервер.

Используя fiddler, вы можете увидеть заголовок запроса, заголовок ответа с его cookie-файлами, а также содержимое ответа. Он используется в середине вашего приложения и Ebay.

На основании моего опыта. Я думаю, что это потому, что Ebay cookie, отправленный вам, не отправляется обратно на сервер Ebay. Скрипач докажет, да или нет.

Другое дело, что полученный вами cookie-файл должен быть отправлен обратно на следующий запрос с использованием того же CookieContainer.

Вы должны заметить, что в CookieContainer есть ошибка в методах .Add (Cookie) и .GetCookies (uri). Вы можете не использовать его, но его могут использовать внутренние коды.

Смотрите подробности и исправляйте здесь:

http://dot -net-expertise.blogspot.com / 2009/10 / cookiecontainer-домен-обработка-ошибка-fix.html

CallMeLaNN

...