|
|
Модератор форума: JonMagon |
Сообщество uCoz Вебмастеру JavaScript, Flash и прочие технологии Авторизация с последующим комментированием (Java) (Проблемы при комментировании. Access Denied.) |
Авторизация с последующим комментированием (Java) |
Доброго времени суток. Прошу прощения, если не там создал тему, ибо подходящего раздела в таком случае вообще нет.
Сразу же обращусь к модераторам: Пожалуйста, не удаляйте тему, ибо с правилами я ознакомился, публиковать ничего вредоносного я не собираюсь. А теперь сразу ко всем. Я пишу программу-клиент для сайта. Программа на языке Java, для Android. Возник вопрос с отправкой POST запросов. Я выполнил авторизацию на сайте, запрос идет на http://site.ucoz.ru/index/sub/ и все проходит как по маслу. GET запросом вытягиваю данные, там html код страницы авторизованного пользователя. Так же сохраняю Cookie (4gameskladuCoz, 4gameskladuzll, 4gameskladld, ucvid). Получаю данные для POST запроса отправки комментария. Все данные корректны и верны, в этом я уверен на 100%. При самой отправке на http://site.ucoz.ru/index/ я заполняю данные и прикрепляю Cookie, но в ответе приходит: Код <?xml version="1.0" encoding="UTF-8"?><ajax><cmd p="js"><![CDATA[_uWnd.alert('Access Denied!','',{w:230,h:80,tm:3000};);]]></cmd></ajax> а ля Access Denied. Что я пропустил? Что не так с отправкой? Отправляю как VIP пользователь, т.е. права для отправки есть. p.s. гнать меня на форумы по Java или Android смысла нет Сообщение отредактировал PhoEn-X - Среда, 09 Апр 2014, 18:26:44
|
PhoEn-X, мало что можно сказать без кода, но обычно данная ситуация возникает если не указан реферер.
В качестве реферера в вашем случае указывается полный адрес материала, к которому вы добавляете комментарий. Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
|
Ага, значит надо прописать заголовок, спасибо за помощь, пойду покопаюсь в гугле. А еще какие-то причины могут быть?
Могу скинуть с пояснениями, только скажите куда) |
|
Код private class UcozLogin extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... arg) { getPostAttributes("http://n-torrents.ru/", false); HttpPost httppost = new HttpPost("http://n-torrents.ru/index/sub/"); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("_tp_", "xml")); nameValuePairs.add(new BasicNameValuePair("a", "2")); nameValuePairs.add(new BasicNameValuePair("ajax", "1")); nameValuePairs.add(new BasicNameValuePair("password", "tmpPassword")); nameValuePairs.add(new BasicNameValuePair("rem", "1")); nameValuePairs.add(new BasicNameValuePair("rnd", postAttributes.get("rnd"))); nameValuePairs.add(new BasicNameValuePair("user", "PhoEn-X")); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpClient.execute(httppost); List<Cookie> cookieList = ((DefaultHttpClient) httpClient).getCookieStore().getCookies(); if(!cookieList.isEmpty()) { for(Cookie cookie : cookieList) { String cookieString = cookie.getName() + " = " + cookie.getValue() + "; domain = " + cookie.getDomain(); Log.d("myLogs", cookieString); } } HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); String strResult = inputStreamToString(is); Log.d("myLogs", strResult); is.close(); } catch (ClientProtocolException e) { //Log.e("Error", e.getMessage()); e.printStackTrace(); } catch (IOException e) { //Log.e("Error", e.getMessage()); e.printStackTrace(); } Log.d("myLogs", "--------------------"); return null; } } private class PostComment extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { Log.d("myLogs", "Пытаемся отправить комментарий:"); getPostAttributes("http://n-torrents.ru/" + urlToParse.substring(25), false); HttpPost httpPost = new HttpPost("http://n-torrents.ru/index/"); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("_tp_", "xml")); nameValuePairs.add(new BasicNameValuePair("a", postAttributes.get("a"))); nameValuePairs.add(new BasicNameValuePair("id", data.get("MATERIAL_ID"))); nameValuePairs.add(new BasicNameValuePair("m", "5")); nameValuePairs.add(new BasicNameValuePair("message", "%D0%A2%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B9%2C+%D1%81%D0%BA%D0%BE%D 1%80%D0%BE+%D1%83%D0%B4%D0%B0%D0%BB%D1%8E.+%3D%3D%3D0")); nameValuePairs.add(new BasicNameValuePair("sos", "436511421")); nameValuePairs.add(new BasicNameValuePair("ssid", postAttributes.get("ssid"))); nameValuePairs.add(new BasicNameValuePair("subs", "0")); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); ((DefaultHttpClient) httpClient).setCookieStore(cookieStore); List<Cookie> cookieList = cookieStore.getCookies(); String finalCookieHeader = ""; if(!cookieList.isEmpty()) { for(Cookie cookie : cookieList) { finalCookieHeader += cookie.getName() + "=" + cookie.getValue() + "; "; } } httpPost.addHeader("Cookie", finalCookieHeader); httpPost.addHeader("Host", "n-torrents.ru"); httpPost.addHeader("Referer", "http://n-torrents.ru/load/music/soundtrack/ost_rejd_2_the_raid_2_2014_mp3/52-1-0-30116"); httpPost.addHeader("X-Requested-With", "XMLHttpRequest"); HttpContext localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); HttpResponse response = httpClient.execute(httpPost, localContext); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); String strResult = inputStreamToString(is); Log.d("myLogs", strResult); is.close(); } catch (ClientProtocolException e) { //Log.e("Error", e.getMessage()); e.printStackTrace(); } catch (IOException e) { //Log.e("Error", e.getMessage()); e.printStackTrace(); } return null; } } private void getPostAttributes(String postUrl, boolean printLogs) { String tmpline = null; Log.d("myLogs", "Получаем исходный код страницы: " + postUrl); HttpGet httpget = new HttpGet(postUrl); try { HttpResponse response = httpClient.execute(httpget); cookieStore = ((DefaultHttpClient) httpClient).getCookieStore(); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); while ((tmpline = reader.readLine()) != null) { if(printLogs) Log.i("myLogs", tmpline); if(tmpline.indexOf("<input type=\"hidden\" name=\"rnd\"") != -1) { int index1 = tmpline.indexOf("<input type=\"hidden\" name=\"rnd\" value=\"") + "<input type=\"hidden\" name=\"rnd\" value=\"".length(); String tmpValue = tmpline.substring(index1, index1 + 3); postAttributes.put("rnd", tmpValue); Log.d("myLogs", "rnd: " + tmpValue); break; } if(tmpline.indexOf("ssid") != -1) { String tmpValue = tmpline.substring(tmpline.indexOf("ssid") + 6, tmpline.indexOf("',a:'")); postAttributes.put("ssid", tmpValue); Log.d("myLogs", "ssid: " + tmpValue); } if(tmpline.indexOf("',a:'") != -1) { String tmpValue = tmpline.substring(tmpline.indexOf("',a:'") + 5, tmpline.indexOf("',s:id")); postAttributes.put("a", tmpValue); Log.d("myLogs", "a: " + tmpValue); } if(tmpline.indexOf("<input type=\"hidden\" name=\"m\"") != -1) { int index1 = tmpline.indexOf("<input type=\"hidden\" name=\"m\" value=\"") + "<input type=\"hidden\" name=\"m\" value=\"".length(); int index2 = tmpline.indexOf("\" /><input type=\"hidden\" name=\"id\""); String tmpValue = tmpline.substring(index1, index2); postAttributes.put("m", tmpValue); Log.d("myLogs", "m: " + tmpValue); } } is.close(); } catch (Exception e) { //Log.e("Error", e.getMessage()); e.printStackTrace(); } Log.d("myLogs", "Список аттрибутов обновлен."); } private String inputStreamToString(InputStream is) { String s = ""; String line = ""; BufferedReader rd = new BufferedReader(new InputStreamReader(is)); try { while ((line = rd.readLine()) != null) { s += line; } } catch (IOException e) { e.printStackTrace(); } return s; } Есть еще глобальные переменные, но весь класс я постить тут не буду, ибо не влезет + куча ненужного кода - парсинга)) Сообщение отредактировал PhoEn-X - Среда, 09 Апр 2014, 21:33:11
|
JonMagon, большое спасибо за помощь, заголовок Referer я задал, а дальше продолжил тестирование, в итоге получилось отправить комментарий. Несколько строчек, конечно, пришлось переписать, зато отправка комментария сработала, значит, теперь можно смело "допиливать" остальные функции с сайта. Еще раз спасибо! Тему можно закрывать.
Сообщение отредактировал PhoEn-X - Суббота, 12 Апр 2014, 16:41:06
|
| |||
| |||