Вверх ↑
Этот топик читают: Гость
Ответов: 21
Рейтинг: 0
#211: 2019-12-12 13:38:01 ЛС | профиль | цитата
А что нужно сделать, чтобы сбор куки шел со всех HTTP клиентов, расположенных в разных контейнерах(Контейнеры простые)?
карма: 0

0
Ответов: 4628
Рейтинг: 749
#212: 2019-12-12 14:39:14 ЛС | профиль | цитата
Вроде, HTTPClient будуть видеть менеджера уровнем выше. Помести CookieManager в главной схеме и укажи его в HTTPClient-ах в контейнерах.
карма: 26

0
Ответов: 1328
Рейтинг: 69
#213: 2019-12-12 21:45:44 ЛС | профиль | цитата
Sersey, имя домена в примере vovahovalot.business.site, домен 3 го уровня
карма: 2

0
Ответов: 21
Рейтинг: 0
#214: 2019-12-15 07:31:24 ЛС | профиль | цитата
Мне необходимо скопировать (воссоздать) POST запрос. Я вижу следующую картину: Form Data ; name: name ; password: password ;. Мне необходимо отправить контент следующего типа: name=name&password=password ;, или иначе?
карма: 0

0
Ответов: 4628
Рейтинг: 749
#215: 2019-12-16 12:47:33 ЛС | профиль | цитата
Method=POST
PostData=
name=name
password=password


Редактировалось 1 раз(а), последний 2019-12-16 13:23:28
карма: 26

0
Ответов: 21
Рейтинг: 0
#216: 2019-12-16 13:36:22 ЛС | профиль | цитата
Еще я обнаружил следующую деталь в заголовках запроса: POST /login HTTP/1.1; Как указать это в свойствах?
карма: 0

0
Ответов: 4628
Рейтинг: 749
#217: 2019-12-16 14:05:58 ЛС | профиль | цитата
POST - это метод запроса: Method=POST
/login или что угодно - это то, что в URL идёт после имени домена. Берется автоматически из URL.
Например, эта страница имеет URL https://forum.hiasm.com/topic/62708/14, тогда в запросе браузер указывает
GET /topic/62708/14 HTTP/1.1

HTTP/1.1 - не имеет значения, компонент сам укажет.

Там же в папке есть пример POST. Указываешь свои данные и пробуешь. Хотя, если речь идёт об авторизации, то все HTTPClient должны быть подключены к CookieManager, тогда первым запросом делается авторизация и устанавливается сессия, остальные запросы уже работают авторизованными.

Редактировалось 3 раз(а), последний 2019-12-16 14:17:03
карма: 26

0
Ответов: 21
Рейтинг: 0
#218: 2019-12-16 18:16:31 ЛС | профиль | цитата
Подскажите пожалуйста, что я делаю не так? (Необходима авторизация)(Извиняюсь за посторонний сайт)

Add(MainForm,2953706,21,105)
{
Width=376
}
Add(MultiElement,4324847,231,77)
{
link(Data1,7156572:Text,[(237,72)(223,72)])
link(Data2,8867859:Text,[(244,72)(258,72)])
}
BEGIN_SDK
Add(EditMulti,12968705,21,21)
{
WorkCount=1
DataCount=2
VarCount=1
link(doWork1,942016:doEvent1,[(64,27)(64,72)])
link(Var1,3825484:Result,[(27,193)(137,193)])
}
Add(StrCat,5500783,131,66)
{
Str1="name="
link(Str2,12968705:Data1,[(144,44)(27,44)])
}
Add(StrCat,15655964,166,94)
{
Str1="password="
link(onStrCat,15387616:In,[])
link(Str2,12968705:Data2,[(179,58)(34,58)])
}
Add(Hub,942016,107,66)
{
link(onEvent1,5500783:doStrCat,[])
link(onEvent2,15655964:doStrCat,[(128,79)(128,100)])
}
Add(StrCatDelim,3825484,131,133)
{
Delimiter="&"
link(Str1,5500783:Result,[])
link(Str2,15655964:Result,[(144,129)(172,129)])
}
Add(LineBreak,8770164,90,133)
{
Caption="SC1"
link(Out,3825484:doStrCatDlm,[])
Primary=[15387616,120,-39]
}
END_SDK
Add(Button,4749496,21,56)
{
Left=5
Top=65
link(onClick,6887516:doEvent1,[])
}
Add(Edit,7156572,217,35)
{
Left=10
Top=10
Text="Имя"
}
Add(Edit,8867859,252,35)
{
Left=10
Top=35
Text="Пароль"
}
Add(HTTP_PostBuilder,2851490,231,119)
{
URL="http://mpets.mobi/login"
Host="mpets.mobi"
Referer="mpets.mobi"
Point(Referer)
link(onBuild,12060081:doLoadString,[])
link(Content,4324847:Var1,[])
}
Add(Hub,6887516,63,56)
{
link(onEvent1,4324847:doWork1,[(103,62)(103,83)])
link(onEvent2,15758960:doLoadString,[(95,69)(95,125)])
}
Add(HTTPClient,12060081,280,119)
{
Method=1
Referer="mpets.mobi"
EncType=1
Decompress=1
CookieManager="1"
Point(RawHeaders)
Point(Referer)
link(onHeadersAvail,11056905:doData,[])
link(Referer,15141087:getVar,[])
}
Add(RichEdit,8885747,378,119)
{
Left=65
Top=10
Width=280
Height=230
ScrollBars=2
}
Add(DoData,11056905,329,119)
{
link(onEventData,8885747:doAdd,[])
link(Data,6469280:Var,[])
}
Add(LineBreak,15685041,294,162)
{
Caption="RHA"
Type=1
link(Data,12060081:RawHeaders,[])
Primary=[6469280,35,-70]
}
Add(CookieManager,15193226,21,14)
{
Name="1"
}
Add(LineBreakEx,15141087,294,77)
{
Caption="URLA"
Type=2
}
Add(LineBreakEx,4951211,119,161)
{
Caption="URLA"
Type=3
link(_Data,15758960:CurrentURL,[])
}
Add(HTTPClient,15758960,105,119)
{
URL="mpets.mobi"
CookieManager="1"
Point(CurrentURL)
link(onHeadersAvail,2603293:doEvent1,[])
}
Add(Memo,4758772,182,119)
{
Left=700
Top=375
link(onChange,2851490:doBuild,[])
}
Add(Hub,2603293,152,119)
{
link(onEvent1,4758772:doAdd,[])
link(onEvent2,4758772:doClear,[])
}

карма: 0

0
Ответов: 4628
Рейтинг: 749
#219: 2019-12-16 18:33:44 ЛС | профиль | цитата
Никакой HTTP_PostBuilder не нужен.


Add(MainForm,15927750,105,210)
{
Width=376
}
Add(Button,4749496,224,273)
{
Left=5
Top=65
link(onClick,12060081:doLoadString,[])
}
Add(Edit,7156572,336,126)
{
Left=10
Top=10
Text="Имя"
}
Add(Edit,8867859,378,126)
{
Left=10
Top=35
Text="Пароль"
}
Add(HTTPClient,12060081,371,273)
{
URL="mpets.mobi"
Method=1
Decompress=1
CookieManager="1"
Point(RawHeaders)
Point(PostData)
link(onHeadersAvail,11056905:doData,[])
link(PostData,4384949:GetData,[])
}
Add(RichEdit,8885747,518,259)
{
Left=65
Top=10
Width=280
Height=230
ScrollBars=2
}
Add(DoData,11056905,455,273)
{
link(onEventData,8885747:doText,[])
link(Data,6469280:Var,[])
}
Add(LineBreak,10681653,385,316)
{
Caption="RHA"
Type=1
link(Data,12060081:RawHeaders,[])
Primary=[6469280,70,-70]
}
Add(CookieManager,15193226,105,119)
{
Name="1"
}
Add(FormatStr,2611372,336,217)
{
Mask="name=%1\r\npassword=%2"
link(onFString,4384949:doData,[])
link(Str1,7156572:Text,[])
link(Str2,8867859:Text,[(349,187)(384,187)])
}
Add(EventFromData,4384949,385,217)
{
link(onEvent,2611372:doString,[(429,223)(429,211)(324,211)(324,223)])
}
карма: 26

0
Ответов: 21
Рейтинг: 0
#220: 2019-12-17 06:25:48 ЛС | профиль | цитата
Так ведь нужен host, да и если авторизация работает, то сервер будет возвращать не 200, а 302
карма: 0

0
Ответов: 4628
Рейтинг: 749
#221: 2019-12-17 13:50:10 ЛС | профиль | цитата
'Host' - это заголовок в запросе, компонент сам поставит из URL.
Kotofey писал(а):
то сервер будет возвращать не 200, а 302

302 - это код перенаправления ресурса. Обрабатывается компонентом автоматически. Не имеет отношения к авторизации.

Есть разные методы авторизации:
- Basic, Digest (возвращают статус 401)
- пользовательская на основе Cookie.
Первые компонент реализует автоматически, достаточно указать HTTPUser+HTTPPass. Основаны на обмене специальными заголовками и не имеют отношения к POST. Такой метод авторизации, например, используется при доступе в админ-панель роутера.

Большинство сайтов, типа форумов и магазинов, реализуют второй способ. Для этого используется механизм cookie для идентификации пользователя при множественных запросах (сессия). А для авторизации на сервер предварительно POST-запросом отправляется логин и пароль. В случае успешной авторизации на сервере в параметрах сессии устанавливается флаг "пользователь авторизован". Последующие запросы передают через куки идентификатор сессии, по которому сервер видит что запрос идёт от авторизованного пользователя.

Ты же мониторишь запросы - посмотри какие запросы посылает браузер, какие ответы получает. И сравни с запросами через компонент. Литературку почитай...

Редактировалось 4 раз(а), последний 2019-12-17 15:17:11
карма: 26

0
Ответов: 21
Рейтинг: 0
#222: 2019-12-17 14:31:45 ЛС | профиль | цитата
Благодарю за помощь, авторизация работает
карма: 0

0
Ответов: 207
Рейтинг: 14
#223: 2020-01-23 14:11:08 ЛС | профиль | цитата
Netspirit, Спасибо за HTTPClient. Есть ли возможность менять method POST/GET через точку динамически? Через CustomMethod этого сделать у меня не получилось.
карма: 2

0
Ответов: 4628
Рейтинг: 749
#224: 2020-01-23 15:05:43 ЛС | профиль | цитата
Почему не получилось? Это свойство для того и предназначено. Задаёшь "GET" или "POST" в качестве значения.
Только для GET надо обеспечить чтобы на PostData и UploadFile не было никаких данных, так как при CustomMethod компонент их всегда отправляет, не разбирая при каком методе они нужны или нет.

На крайний случай можешь поправить свойство Method в *.ini и *.pas файлах, чтобы можно было отметить свойство для указания в runtime. По аналогии с другими свойствами.

Редактировалось 1 раз(а), последний 2020-01-23 15:08:00
карма: 26

0
Ответов: 207
Рейтинг: 14
#225: 2020-01-23 15:40:49 ЛС | профиль | цитата
Netspirit, Делаю так, не работает. Если CustomMethod не пуст, то ничего не происходит.


Add(Button,6013603,497,343)
{
Left=5
Data=String(GET)
link(onClick,8563212:doEvent1,[])
}
Add(RichEdit,14489664,735,350)
{
Left=5
Top=25
Width=655
Height=465
ScrollBars=3
}
Add(HTTPClient,16337173,672,343)
{
EncType=2
Point(doCustomMethod)
link(URL,8206063:Text,[])
link(onFinish,14489664:doAdd,[])
}
Add(Hub,8563212,546,343)
{
link(onEvent1,16337173:doCustomMethod,[(605,349)(605,370)])
link(onEvent2,16337173:doLoadString,[(636,356)(636,349)])
}
Add(VisualStrings,8206063,672,294)
{
Lines=#38:https://forum.hiasm.com/topic/62708/14|
Width=221
}

Netspirit писал(а):
На крайний случай можешь поправить свойство Method в *.ini и *.pas файлах, чтобы можно было отметить свойство для указания в runtime. По аналогии с другими свойствами.

Это понятно, лезть самому в код не хочется т.к. компонент постоянно обновляется.

Тогда продублирую в схеме компонент с POST/GET методами, и при сравнении метода будет выбираться один из вариантов.
карма: 2

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)