Здравствуйте, уважаемые участники! Решил я тут на досуге развлечения ради покопаться с накруткой голосований на wordpress-плагине wp-polls. Не то чтобы очень нужно было, просто наткнулся на вот эту статью на Хабре. Стало интересно, решил попробовать. Выбрал для чистоты эксперимента первый попавшийся сайт, турецкий даже: сайт. Естественно, устройство плагина на сайте малость отличалось от описанного в статье, но в целом и правда было очень похоже: запрос аяксу, защита по IP (даже из тора не поголосуешь особо), похожие поля, POST и какие-то GET'ы. Wireshark показал, что POST отправляется всего один и только до результативного голосования, т.е. ну прям "оно". Копипасту форум не дает делать в большом колтчестве, потому больше ссылок, извиняюсь. Скрипт, отправляющий данные аяксу был изучен: Скрипт голосования со страницы После чего я кое-как нацарапал свой скрипт на Python, которым владею слабо: Code: import http.client, urllib.request, urllib.parse, urllib.error params = urllib.parse.urlencode({'@url': '/wp-admin/admin-ajax.php ', '@data': 'action=polls&view=process&poll_id=2&poll_2=26&poll_2_nonce=523feaf068', '@cache': '!1', '@success': 'true' }) headers = {"Content-type": "application/x-www-form-urlencoded", #"Accept": "text/plain", "X-Forwarded-For": "91.77.110.166, 93.114.43.156" } conn = conn = http.client.HTTPConnection("9colour.com") #conn.request("POST", "/wp-admin/admin-ajax.php", params, headers) conn.request("POST", "/wp-content/plugins/wp-polls/wp-polls.php", params, headers) response = conn.getresponse() print(response.status, response.reason) data = response.read() print(data) conn.close() poll_nonce - это я заприметил милое поле на страничке HTML: <input type="hidden" id="poll_2_nonce" name="wp-polls-nonce" value="523feaf068"> Значение иногда меняют, но нечасто. IP были перепробованы настоящие, вымышленные, да и вообще любые. Я даже пробовал убрать вообще все заголовки, оставив только X-Forwarded-For (немного прозевал этот момент, но каких-то прочих, отсылаемых сниффер не заметил). Т.к. я пишу тут, понятно чем кончилось дело)) >>> 200 OK b'' И никакого эффекта. Хрен с ним, с голосованием, но расскажите пожалуйста, почему это не работает и чего я не учел, а то изрядно повозился с этим уже, теперь любопытство распирает)) Если разделом промахнулся - прошу перенести тему. Буду рад ответам.
Aspanu Откуда вы увидели вот это? Code: params = urllib.parse.urlencode({'@url': '/wp-admin/admin-ajax.php ', '@data': 'action=polls&view=process&poll_id=2&poll_2=26&poll_2_nonce=523feaf068', '@cache': '!1', '@success': 'true' }) А именно - откуда появился символ @? Если вы умеете работать с Wireshark'ом - то посмотрите все-таки что отправляется веб-серверу, если вы запускаете свой скрипт и если голосуете браузером. Мне почему-то кажется что запросы не совпадут и вам нужно оставить только 'action=polls&view=process&poll_id=2&poll_2=26&poll_2_nonce=523feaf068' записанное в виде словаря.
Ну это чтобы не заморачиваться с кодом, я взял питон, а синтаксис знаю вообще хреново. Поглядел здесь. Wireshark ещё раз погоняю, в моих руках он просто что-то странное выдавал, но скрипт на странице содержит такое: Code: jQuery.ajax({type:"POST", url:pollsL10n.ajax_url,data:"action=polls&view=process&poll_id="+poll_id+"&poll_"+poll_id+"="+poll_answer_id+ "&poll_"+poll_id+"_nonce="+poll_nonce,cache:!1,success:poll_process_success}) Из чего я заключил, что сам POST-лишь один из элементов словаря для ajax, остальное - хитрые параметры.
Ааа, блин!!! Сори за дабл-пост, но действительно это я затупил!)) Собаки не нужны, в запросе другие параметры, ровно как вы и сказали!! Всё получилось Code: params = urllib.parse.urlencode({'action': 'polls', 'view': 'process', 'poll_id': 2, 'poll_2': 26, 'poll_2_nonce': '58b5ec145b'}) Поправил. Ура.