Android: как подключиться к веб-странице программно, используя HttpsURLConnection

Я новичок в Android (и на Java тоже), поэтому извините, если моя проблема – основное предложение! Я должен написать приложение Android, значки whitch на веб-странице aspx в фоновом режиме, получить некоторые данные из него и после этого выйти из формы на веб-странице. (И делать это все программно)

В основном, процедура нравится получать электронную почту из Gmail:
1. перейдите на страницу «https://mail.google.com» и войдите в
2. нажмите «Контакты» (== перейдите на страницу «https://mail.google.com/mail/?shva=1&zx=dzi4xmuko5nz#contacts»).
3. Извлеките страницу с помощью HttpsURLConnection (или что-то вроде этого) и получите электронную почту в объекте (например, Map или String)
4. Нажмите ссылку «Выйти»

Надеюсь, это понятно. Глядя в Интернет, я нахожу решение только для «выборки», так что это не проблема. Но я не имею ни малейшего представления о «щелчке».

...... // Get the connection URL myurl = new URL("https://mail.google.com"); HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection(); // complete the fields con.setRequestProperty("Email","myacc"); con.setRequestProperty("Passwd","mypass"); /* * in this part, should make sign in, and go directly to contacts... * I don't have any idea how to do it... */ // for the present, just write out the data InputStream ins = con.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(ins)); String inputLine; while ((inputLine = in.readLine()) != null) { Log.d("Page:"," "+inputLine); } in.close(); /* * And here should be the "Sign out" part */ ...... 

Любая помощь будет отличной, спасибо за это! (И извините, если мой английский не так хорошо …)

EDIT: проблема решена. Спасибо!

  ....... String GMAIL_CONTACTS = "https://mail.google.com/mail/?shva=1#contacts"; String GMAIL_LOGIN = "https://mail.google.com"; DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(GMAIL_LOGIN); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); nameValuePairs.add(new BasicNameValuePair("Email", MY_ACC)); nameValuePairs.add(new BasicNameValuePair("Passwd", MY_PASS)); nameValuePairs.add(new BasicNameValuePair("signIn", "Sign In")); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpClient.execute(httpPost); Log.d(TAG, "response stat code " + response.getStatusLine().getStatusCode()); if (response.getStatusLine().getStatusCode() < 400) { String cookie = response.getFirstHeader("Set-Cookie") .getValue(); Log.d(TAG, "cookie: " + cookie); // get the contacts page HttpGet getContacts = new HttpGet(GMAIL_CONTACTS); getContacts.setHeader("Cookie", cookie); response = httpClient.execute(getContacts); InputStream ins = response.getEntity().getContent(); BufferedReader in = new BufferedReader(new InputStreamReader( ins)); String inputLine; while ((inputLine = in.readLine()) != null) { Log.d(TAG, " " + inputLine); } in.close(); } else { Log.d(TAG, "Response error: " + response.getStatusLine().getStatusCode()); } ....... 

«Щелчок» в основном отправляет запрос на сервер и отображает информацию о возврате.

1 / выяснить, какой url для вызова этого запроса (если это веб-страница, см., Например, firebug)

2 / выяснить, какие параметры, выяснить, является ли метод GET или POST

3 / воспроизводится программно.

4 / «фаза входа», вероятно, подразумевает использование файла cookie, который сервер дает вам, и что вы должны отправить обратно после каждого запроса

Однако ваш подход неверен. Вам не следует пытаться напрямую подключаться к Google через URL-соединения. (Также вы должны использовать HttpClient). Более того, свойства запроса не являются параметрами. Это заголовки.

Я настоятельно рекомендую вам начать с чего-то более простого, чтобы получить доступ к HTTP в java, GET, POST, параметрах, заголовках, ответах, куках …

редактировать

Получив ответ, вы захотите проверить, что

 response.getStatusLine().getStatusCode() < 400 

Он скажет вам, что логин был успешным. (2xx – успешные, 3xx перемещаются и т. Д. 4xx – ошибки в запросе, 5xx – ошибки на стороне сервера, Gmail отвечает 302 для входа, чтобы предлагать перенаправление на папку «Входящие»). Затем вы заметите, что в ответе «Set-Cookie» есть определенный заголовок, содержащий куки-файл, который вы хотите для дальнейших подключений, чтобы:

 String cookie = response.getFistHeader("Set-Cookie"); 

Затем вы сможете вызвать запрос для получения контактов:

 HttpGet getContacts = new HttpGet(GMAIL_CONTACTS); getContacts.setHeader("Cookie", cookie); response = httpClient.execute(getContacts); InputStream ins = response.getEntity().getContent(); 

Это должно быть что-то вроде этого.

То, что вы пытаетесь сделать, – это проанализировать страницу httml Gmail. Это неправильный подход, поскольку Gmail использует javascript для создания страницы. Ваш код должен будет эмулировать браузер (выполнить javascript), чтобы это работало.

Если вам нужен только доступ для чтения к Gmail, используйте API-интерфейс входящей почты Gmail . Это дает вам доступ к непрочитанным сообщениям во входящих.

Если вам нужен полный доступ, см. Доступ к IMAP Gmail . Поскольку IMAP – это другой протокол, тогда вам нужно будет использовать отдельную библиотеку IMAP для java. См. Этот учебник .

Вы должны рассмотреть возможность использования почтового запроса для передачи данных на сервер: отправка данных POST на Android

Использование свойств соединения не имеет ничего общего с тем, что вы хотите достичь.

С уважением, Стефан