Как войти в Android Market с помощью C #?

#c# #login #google-play #webrequest

#c# #аутентификация #google-play #веб-запрос

Вопрос:

Я хотел бы войти на веб-страницу Android Market с помощью C #. Я потратил целый день на чтение HTTP-запросов и данных POST, но, похоже, ничего не работает. Что я могу сделать, это прочитать веб-страницу, на которой находится форма входа в Google. Но чтение страницы ПОСЛЕ входа в систему кажется невозможным…

Кто-нибудь может дать мне подсказку о том, как это сделать?

Кстати: код, который я пробовал, показан ниже:

 string mail = "XXXXXXXXXX@gmail.com";
string pw = "XXXXXXXXXX";

// Create a request using a URL that can receive a post. 
WebRequest request = WebRequest.Create (@"https://market.android.com/publish");
// Set the Method property of the request to POST.
request.Method = "POST";
// Create POST data and convert it to a byte array.
string postData = String.Format ("Email={0}amp;Passwd={1}amp;signIn=Sign in", mail, pw);
byte[] byteArray = Encoding.UTF8.GetBytes (postData);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = request.GetRequestStream ();
// Write the data to the request stream.
dataStream.Write (byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close ();
// Get the response.
WebResponse response = request.GetResponse ();
// Display the status.
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream ();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader (dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd ();
// Display the content.
Console.WriteLine (responseFromServer);
// Clean up the streams.
reader.Close ();
dataStream.Close ();
response.Close ();
  

Комментарии:

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

Ответ №1:

Что я обычно делаю: получаю заголовки http в реальном времени для Firefox, и вы можете записать запрос, отправляемый вашим браузером. Затем просто повторите это в коде.

например, Android Marketplace делает это довольно сильно отличается от вашего кода.

на самом деле он отправляет в: https://accounts.google.com/ServiceLoginAuth

И отправляет данные continue=https://market.android.com/publish/Homeamp;followup=https://market.android.com/publish/Homeamp;service=androiddeveloperamp;nui=1amp;dsh=amp;GALX=amp;pstMsg=1amp;dnConn=amp;timeStmp=amp;secTok=amp;Email=Passwd=amp;signIn=

Ответ №2:

Вам нужно создать CookieContainer экземпляр и назначить его CookieContainer свойству в каждом запросе.

Это сохранит файл cookie для входа, чтобы сайт знал, что вы все еще вошли в систему.

Комментарии:

1. Хорошо, я добавил это. Вместе с приведенным ниже ответом Рона, похоже, теперь все начинает работать. Но теперь Google выдает мне сообщение «функция cookie отключена. Пожалуйста, включите его. » результат по моему запросу. Есть ли что-нибудь еще, что я должен рассмотреть?

2. Вероятно, им нужен файл cookie, который устанавливается при запросе страницы входа.

3. Не могли бы вы подробнее рассказать об этом? Потому что на самом деле я думал, что это то, что я делаю?