145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
1

Создание и копирование настроек IdHTTP

05.07.2012, 18:33. Показов 2069. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такой вот вопрос назрел.

При запуске программы я подключаюсь к сайту и получаю от него кукисы.
Назрела необходимость вынести кусок проги в свой поток.

в потоке я создаю свой компонент
C++
1
TIdHTTP * http;
Как можно скопировать в новый компонент шттп, значения кукисов, из "эталонного" компонента IdHTTP1.
Куки храню в компоненте IdCookieManager1
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2012, 18:33
Ответы с готовыми решениями:

Копирование настроек компоненты
Всем привет! Имеется tpagecontrol. Необходимо при добавлении вкладки создать некоторые компоненты...

Копирование данных и настроек
Посоветуйте пожалуйста программу, которая позволит скопировать все данные и настройки пользователя,...

Копирование настроек дополнения NoScript браузера Firefox
Как перенести настройки этого дополнения с одного компьютера на адругой?

Резервное копирование настроек Win Server 2012 R2
Приветствую вас, знатоки WinServer. Столкнулся с такой бедой : хочу создать резервное копирование...

11
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.07.2012, 18:43 2
Так походу IdCookieManager1 сохраняет куки(покрайней мере я так думаю)... вот только где и как их найти загадка...

Тут посмотри...IdHTTP авторизаця на форуме
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
05.07.2012, 19:21  [ТС] 3
дело не в том как авторизироватся и сохранить куки в IdCookieManager1

а в том как заставить новосозданный компонент
TIdHTTP * http

считывать куки из уже ранее созданного и заполненного компонента?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.07.2012, 21:06 4
Предпологаю
v1. Он должен автоматом грузить их
v2. Пробывать грузить их как по указаной мною ссылке

Добавлено через 1 час 30 минут
Это же твой код?

C++
1
2
3
4
5
6
7
8
9
10
11
void SetCookies()
{
TStringList *Temp=new TStringList();
Form1->IdHTTP1->Response->RawHeaders->Extract("Set-cookie", Temp);
for (int i = 0; i < Temp->Count; i++)
 {
 Temp->Strings[i]=Temp->Strings[i].SubString(0, AnsiPos(";",Temp->Strings[i])-1)+"; path=/";
 Form1->IdHTTP1->CookieManager->AddCookie(Temp->Strings[i], Form1->IdHTTP1->Request->Host);
 }
Temp->Free();
}
0
LK
Заблокирован
05.07.2012, 21:21 5
наглядный пример
C++
1
2
TButton *btn = new TButton();
btn->Caption = Button2->Caption;
если я правильно понял задание
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.07.2012, 22:50 6
К стати IdHTTP не визуальный компонент поэтому его можно вприципе вызывать из потока.(т.е если он есть на форме)
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
06.07.2012, 10:09  [ТС] 7
Цитата Сообщение от LK Посмотреть сообщение
наглядный пример
C++
1
2
TButton *btn = new TButton();
btn->Caption = Button2->Caption;
если я правильно понял задание
LK, Вы как всегда правы именно так это и делается. И что самое интерестное что я про это знал, и пробовал так сделать, все свойства которые мне были нужны я именно так и присвоил, пока не добрался до куков. на них система в тупую вылетает с ошибкой
Миниатюры
Создание и копирование настроек IdHTTP  
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
06.07.2012, 16:27  [ТС] 8
Цитата Сообщение от Avazart Посмотреть сообщение
v1. Он должен автоматом грузить их
v2. Пробывать грузить их как по указаной мною ссылке
v1. Автоматом это как ?
v2. Пока что я нашел временное решение для себя: сделал глобальный стринглист, в него загружаю куки, и потом из него при необходимости считываю... но неправильно это как то

Добавлено через 1 час 20 минут
На любой из этих строк вылетает ошибка как на картинке выше.
C++
1
2
3
4
5
http->ProxyParams->ProxyPort =  Form1->IdHTTP1->ProxyParams->ProxyPort;
http->ProxyParams->ProxyServer =  Form1->IdHTTP1->ProxyParams->ProxyServer;
http->ProxyParams->ProxyPassword =  Form1->IdHTTP1->ProxyParams->ProxyPassword;
http->ProxyParams->ProxyUsername =  Form1->IdHTTP1->ProxyParams->ProxyUsername;
http->ProxyParams->BasicAuthentication =  Form1->IdHTTP1->ProxyParams->BasicAuthentication;
это отрабатывает нормально, без ошибки.
C++
1
2
http->AllowCookies = true;
http->CookieManager = IdCookieManager1;
Добавлено через 4 часа 32 минуты
Странно это все....

вобщем нашлось решение, возможно это конечно особенности компилятора, или просто я еще многого не понимаю, но решение выглядит так:

C++
1
TIdHTTP * http = Form1->IdHTTP1;
Только после такого обьявления новосозданный компонент присваивает себе все параметры "эталонного" и с ним можно работать, можно применить ему все нужные мне параметры вручную.
Тоесть там гду раньше у меня вылетало аксес виолейшн то теперь ети строчки отрабатываются на ура.
C++
1
2
3
4
5
http->ProxyParams->ProxyPort =  Form1->IdHTTP1->ProxyParams->ProxyPort;
http->ProxyParams->ProxyServer =  Form1->IdHTTP1->ProxyParams->ProxyServer;
http->ProxyParams->ProxyPassword =  Form1->IdHTTP1->ProxyParams->ProxyPassword;
http->ProxyParams->ProxyUsername =  Form1->IdHTTP1->ProxyParams->ProxyUsername;
http->ProxyParams->BasicAuthentication =  Form1->IdHTTP1->ProxyParams->BasicAuthentication;
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.07.2012, 16:30 9
v1. Автоматом это как ?
IdCookieManager по идее должен их куда-то сохранять.
Ну в приципе поэтому и работает
C++
1
2
http->AllowCookies = true;
http->CookieManager = IdCookieManager1;
Всегда не понимал наличия не работающего нормально метода Assign
C++
1
IdHTTP1->Assign(IdHTTP2)
Добавлено через 2 минуты
C++
1
TIdHTTP * http = Form1->IdHTTP1;
Только после такого обьявления новосозданный компонент присваивает себе все параметры "эталонного" и с ним можно работать, можно применить ему все нужные мне параметры вручную.
Нифига не присваивает- это лиш присваивание указателей с потеряй выделенной памяти.

Но я уже говорил о
К стати IdHTTP не визуальный компонент поэтому его можно вприципе вызывать из потока.(т.е если он есть на форме)
Поэтому можно использовать в потоке IdHTTP который находится на форме.
1
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
06.07.2012, 16:40  [ТС] 10
та я так и использовал, просто есть процесс который делает на сайт последовательно 500...700 запросов. если вынести в поток, то при одновременном обращении к IdHTTP1 поток разрушается.
потому и захотел в потоке создавать свой собственный компонент, который бы принимал значения нужного, и работал отдельно и независимо...

видать таки придется ставить отдельный компонент для потока.

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Нифига не присваивает- это лиш присваивание указателей с потеряй выделенной памяти.

таки да, только что на тесте увидел. хотя по примеру ЛК у меня не создается компонент.
C++
1
TIdHTTP * http = new TIdHTTP ;
Код
[BCC32 Error] Unit1.cpp(138): E2285 Could not find a match for 'TIdHTTP::TIdHTTP()'
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.07.2012, 17:08 11
В потоке
C++
1
2
3
4
5
TIdHTTP  *IdHTTP2 = new TIdHTTP(NULL);
TIdCookieManager  *IdCookieManager2 = new TIdCookieManager(NULL);
//... задание свойств IdHTTP2;
IdHTTP2->CookieManager = IdCookieManager2;
//... задание свойств IdCookieManager2;
Если поток один и вы хотите что бы куки сохранились после окончания потока(его разрушения) то не создавайте в потоке
IdCookieManager а просто назначайте IdHTTP тот IdCookieManager который лежит на форме:
C++
1
2
3
TIdHTTP  *IdHTTP2 = new TIdHTTP(NULL);
//... задание свойств IdHTTP2;
IdHTTP2->CookieManager = Form1->IdCookieManager1;
Добавлено через 13 минут
В принципе можно вообще не создавать компоненты, просто вызывать их в потоке
C++
1
2
3
4
5
6
7
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
// Настройка IdHTTP1
Form1->IdHTTP1->Get(/*...*/);
}
//---------------------------------------------------------------------------
Впринципе я так делал в проге которая лежит здесь Взять значения из сайта
1
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
07.07.2012, 10:27  [ТС] 12
Спасибо!

Работает.
0
07.07.2012, 10:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2012, 10:27
Помогаю со студенческими работами здесь

Копирование общего каталога с переносом настроек безопасности
Доброго времени суток! Имеется общедоступный каталок с настройками доступа и безопасности к нему....

Idhttp куки их создание показ и скачивание файла
задача проста скачать файл например http://www.fayloobmennik.net/2583037 гетом беру страницу...

IdHTTP и IdHTTP сервер: как отправить сообщение от сервера к клиенту?
Всем привет, отправляю файл по частям с клиента на сервер, и хочу получать обратное сообщение, что...

Создание настроек
Здравствуйте, помогите доработать идею. Вообщем работаю над интернет магазином, так вот надо что то...

Создание окна настроек.
Как сделать так, что бы , допустим, при клике на кнопке открывалось окно, где можно было бы вводить...

Создание файла настроек (JSON)
Собственно, я пишу программу, которая осуществляет определенные действия с папками и файлами в них,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru