Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
#1

Indy авторизация на WordPress - C++ Builder

19.11.2017, 21:29. Просмотров 330. Ответов 13
Метки нет (Все метки)

Здравствуйте,
пытаюсь авторизоваться на вордпресс с использованием indy

вот такой код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TStringList* params = new TStringList;
  IdHTTP1->CookieManager= IdCookieManager1;
  IdHTTP1->AllowCookies= true;
 
   String Url = "http://www.maysait.ru/wp-login.php";
 
 params->Add("log=login");
 params->Add("pwd=password");
 
 
 IdHTTP1->Post(Url, params);
 
 
 delete params;
}
//---------------------------------------------------------------------------
компилируется без ошибок, приложение запускается, но когда жмакаеш кнопку, выскакивает окно с такой ошибкой "HTTP/1.1 405 Not Allowed."
работаю в C++Builder 10.1 Berlin
версия Indy 10.6.2.5341

Добавлено через 5 часов 9 минут
вот сам код php со страницы авторизации

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form name="loginform" id="loginform" action="http://maysait.ru/wp-login.php" method="post">
    <p>
        <label for="user_login">Имя пользователя<br />
        <input type="text" name="log" id="user_login" class="input" value="login" size="20" /></label>
    </p>
    <p>
        <label for="user_pass">Пароль<br />
        <input type="password" name="pwd" id="user_pass" class="input" value="" size="20" /></label>
    </p>
        <p class="forgetmenot"><label for="rememberme"><input name="rememberme" type="checkbox" id="rememberme" value="forever"  /> Запомнить меня</label></p>
    <p class="submit">
        <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="Войти" />
        <input type="hidden" name="redirect_to" value="http://maysait.ru/wp-admin/" />
        <input type="hidden" name="testcookie" value="1" />
    </p>
</form>
переписал сам код с++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TStringList* params = new TStringList;
 
  IdHTTP1->AllowCookies= true;
  IdHTTP1->HandleRedirects = true;
 
 params->Add("log=login");
 params->Add("pwd=password");
 params->Add("rememberme=forever");
 params->Add("wp-submit=Войти");
 params->Add("redirect_to=http://maysait.ru/wp-admin/");
 params->Add("testcookie=1");
 
   Memo1->Text=IdHTTP1->Post("http://maysait.ru/wp-login.php", params);
 
 
 delete params;
}
//---------------------------------------------------------------------------
но ничего не поменялось, также компелирует без ошибок, приложение запускается, но нажимаеш кнопку и выскакивает окно с ошибкой "HTTP/1.1 405 Not Allowed."
http://www.cyberforum.ru/cpp-builder/thread837877.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2017, 21:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Indy авторизация на WordPress (C++ Builder):

BytesToRaw (Indy 10)
Добрый день, уважаемые коллеги. Реализовывая передачу изображения по...

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

Proxyswitcher/Indy
Есть идея написать программу, которая сможет сама голосовать на слабеньком...

Indy 10 и Builder
У кого нить есть ссылочка на скачивание indy 10 для Builder 6 и 2009. а то все...

Indy client
Здравствуйте, пишу на c++. кто-нибудь может разобраться с Indy Clients в...

13
gunslinger
случайный прохожий
1269 / 800 / 317
Регистрация: 20.07.2013
Сообщений: 2,248
19.11.2017, 22:33 #2
Входи на сайт через браузер и анализируй с помощью, например, HTTP Analyzer переданные и полученные данные. Потом воспроизводи всё в своей программе.
А код со страницы авторизации больше нужен, если ты реализуешь передачу данных через компонент (Cpp)WebBrowser.
0
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
20.11.2017, 17:29  [ТС] #3
установил HTTP Analyzer

вот что передаёт при авторизации в браузере

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /wp-login.php HTTP/1.1
Host: maysait.ru
Connection: keep-alive
Content-Length: 132
Cache-Control: max-age=0
Origin: http://maysait.ru
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://maysait.ru/wp-login.php?redirect_to=http%3A%2F%2Fmaysait.ru%2Fwp-admin%2F&reauth=1
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: _ym_uid=1502112284467182284; beget=begetok; wp-settings-1=editor%3Dtinymce%26libraryContent%3Dbrowse%26mfold%3Do%26advImgDetails%3Dshow%26wplink%3D1%26posts_list_mode%3Dlist%26urlbutton%3Dfile%26wpfb_adv_uploader%3D1%26hidetb%3D1%26align%3Dcenter; wp-settings-time-1=1502187717; intercom-id-r70azrgx=269736fe-0e2d-48de-b6bf-7936f1a0fe09; PHPSESSID=79f935f75dec14efe6b9a8ef4796346e; wordpress_test_cookie=WP+Cookie+check
 
log=login&pwd=password&wp-submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&redirect_to=http%3A%2F%2Fmaysait.ru%2Fwp-admin%2F&testcookie=1
а вот это программа

C++
1
2
3
4
5
6
7
8
9
POST /wp-login.php HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 132
Host: maysait.ru
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/3.0 (compatible; Indy Library)
 
log=login&pwd=pasword&wp-submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&redirect_to=http%3A%2F%2Fmaysait.ru%2Fwp-admin%2F&testcookie=1
и что ттеперь с этим делать?
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,268
Записей в блоге: 2
20.11.2017, 17:44 #4
Доброго!
Для чего нужна авторизация, что Вы через нее хотите сделать? Если менять и корректировать файлы, то вам нужна не авторизация, а FTP. Если у Вас противный случай, то я даже не представляю как Вы будете что то админить через TIdHTTP (это конечно можно, если если Вы очень усидчевый человек и готовы потратить кучу времени для работы с API).
0
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
20.11.2017, 22:58  [ТС] #5
авторизация нужна для того что бы скачать картинки с сайта (сайт принадлежит мне) из защищённого раздела, где загрузки будут доступны только зарегистрированным пользователям, саму загрузку картинок обсудили и сделали тут http://www.cyberforum.ru/cpp-builder/thread2119967.html#post11701982
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,268
Записей в блоге: 2
20.11.2017, 23:07 #6
Используйте FTP, самое простое и эффективное решение для работы с файлами дистанционно.
Для этого Вам необходимо посмотреть настройки FTP соединения от вашего хостера...накидать пару строчек для подключения.
0
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
20.11.2017, 23:08  [ТС] #7
а можно какой нибудь пример, чтоб хоть понять от чего отталкиваться
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,268
Записей в блоге: 2
20.11.2017, 23:21 #8
1) берете настрой FTP вашего хостера
2) Кидайте на форму TIdFTP
3) На кнопку делаем след код (как пример, залить файл на сайт) :
C++
1
2
3
4
5
6
7
8
9
         IdFTP1->Passive=true;
         IdFTP1->TransferType= ftBinary;
         IdFTP1->Host="my_site.ru";//Ваш домен куда заливаете
         IdFTP1->Port=21;
         IdFTP1->Username="******"; //Логин и пароль от вашего FTP...не путать с данными для авторизации
         IdFTP1->Password="*******";
         IdFTP1->Connect();
         IdFTP1->Put(MS,"так будет называться мой файл на сайте",false); //MS это файл стрим, в него помещен файл,что отправляем
         IdFTP1->Disconnect();
0
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
20.11.2017, 23:27  [ТС] #9
я так понимаю что здесь не имеет значения как зарегистрирован пользователь, поскольку будет скачиватся через учётную запись администратора, но это совсем не подходит, поскольку у каждого пользователя свои права на скачивание, комуто можно это скачать, а комуто нет, поэтому наверно и нужна авторизация, как я думаю.
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,268
Записей в блоге: 2
20.11.2017, 23:38 #10
Цитата Сообщение от hiypman Посмотреть сообщение
поскольку у каждого пользователя свои права на скачивание

Ну я даже не знаю что Вам сказать,..сказать читайте и изучайте фундамент...но Вы не будите же...а объяснять ...Вы даже не читаете, что в примере Вам в комментах написал, тогда бы не было глуппых вопросов, типа
Цитата Сообщение от hiypman Посмотреть сообщение
поскольку будет скачиватся через учётную запись администратора,
0
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
21.11.2017, 00:21  [ТС] #11
C++
1
Username="******"; //Логин и пароль от вашего FTP...не путать с данными для авторизации
Ну как же не читаю, получается что любой пользователь программы, не зависимо от того зарегистрирован он на сайте или нет, может скачать файл, поскольку используются логин и пароль мои для доступа фтп, а не пользователя.
А литературы и форумов по с++ я уже прочитал столько, сколько за всё школу не читал, но многое понять без объяснения и примеров просто не возможно, поэтому и прошу помощи, чтоб как учитель ученику втолдонил.
0
Dinkin
646 / 444 / 116
Регистрация: 31.05.2013
Сообщений: 2,268
Записей в блоге: 2
21.11.2017, 08:19 #12
Цитата Сообщение от hiypman Посмотреть сообщение
Ну как же не читаю, получается что любой пользователь программы, не зависимо от того зарегистрирован он на сайте или нет, может скачать файл, поскольку используются логин и пароль мои для доступа фтп, а не пользователя.
Нет, FTP как раз и создан для работы с файлами и разграничением доступа к ним по правам учеткам пользователей. То есть задается учетка и определяется что под этой учеткой можно сделать. А уж кому какие права раздавать Вам решать.

PS, если Вам необходимо разграничение прав и доступов, то я даже не представляю как Вы это хотели сделать изначально, только при помощи авторизации на сайте.
0
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
24.11.2017, 15:44  [ТС] #13
написал так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TStringList* post = new TStringList;
 
  IdHTTP1->CookieManager= IdCookieManager1;
  IdHTTP1->AllowCookies= true;
  IdHTTP1->HandleRedirects = true;
 
 IdHTTP1->Request->ContentType = "application/x-www-form-urlencoded";
 IdHTTP1->Request->UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
 
 post->Add("log="+Edit2->Text);
 post->Add("pwd="+Edit3->Text);
 post->Add("rememberme=forever");
 post->Add("wp-submit=Войти");
 post->Add("redirect_to="+Edit1->Text+"/wp-admin/");
 post->Add("testcookie=1");
 
   Memo1->Text=IdHTTP1->Post(Edit1->Text+"/wp-login.php", post);
 
 
}
//---------------------------------------------------------------------------
как бы уже точно должно работать , но также выскакивает ошибка "HTTP/1.1 405 Not Allowed."

может эта ошибка получатся из-за того что в пост запросе с сайта идёт

PHP
1
POST /wp-login.php HTTP/1.1
а из программы идёт

PHP
1
POST /wp-login.php HTTP/1.0
версия HTTP разные


выкладываю проэкт C++Builder 10, может кто попробует, там же есть ехе
если нет вордпресса на котором проверить, в личку дам свой
login wp.zip
0
hiypman
3 / 0 / 2
Регистрация: 23.05.2017
Сообщений: 30
27.11.2017, 20:13  [ТС] #14
побороть ошибку 401 всётаки получилось, но теперь другая проблема, не посылаются куки, я так понял что CookieManager не очень работает, надо както прописывать вручную, попробовал взять с этой темы http://www.cyberforum.ru/post235829.html
но при компиляции ошыбка по этой строчке

C++
1
Form1->IdHTTP1->CookieManager->AddCookie(Temp->Strings[i], Form1->IdHTTP1->Request->Host);
[bcc32 Error] Unit1.cpp(24): E2316 'AddCookie' is not a member of 'TIdCookieManager'
Full parser context
Unit1.cpp(18): parsing: void SetCookies()

Добавлено через 50 минут
код ответа 200 OK
а должно быть 302

и вкладка Cookies в Http Analyzer V7 пустая
а должно быть (как при входе через браузер)
_ym_uid:1502112284467182284
beget:begetok
wp-settings-1:editor=tinymce&libraryContent=browse&mfold=o&advImgDetails=show&wplink=1&posts_list_mode=list&urlbutton=file&wpfb_adv_ uploader=1&hidetb=1&align=center
wp-settings-time-1:1502187717
intercom-id-r70azrgx:269736fe-0e2d-48de-b6bf-7936f1a0fe09
PHPSESSID:d2f2adeee72e48464a5368da76ad58bc
wordpress_test_cookie:WP Cookie check
0
27.11.2017, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2017, 20:13
Привет! Вот еще темы с решениями:

Indy и HTTPS
Добрый день. Необходимо отправлять POST запрос на https ресурс. Решил...

Проблемы с Indy
Везде на форумах и в книгах вижу описание процедуры: void __fastcall...

ошибка indy
В Билдере не компилица ни один компонент Indy - дает ошибку Error readind...

Indy Client
Подскажите как в indy client 10 c копейками версия родной из 10 билдера,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru