Сейчас на форуме: ManHunter, rmn, _MBK_, tyns777 (+9 невидимых)

 eXeL@B —› Программирование —› GET (POST) +Cookies [Delphi]
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 августа 2008 19:36 · Поправил: Isaev
· Личное сообщение · #1

Нужно перейти по двум ссылкам, учитывая cookies при клике по второй... (чтобы сайт думал, что это тот же юзер дальше кликает, а не кто-то другой по прямой ссыли зашёл)
С куками раньше не работал, поэтому туплю что-то...
делаю так:

// на Form лежит IdHTTP1, IdCookieManager1
// IdHTTP1.CookieManager:=IdCookieManager1;
// IdHTTP1.AllowCookies:=True;
// IdHTTP1.HandleRedirects:=True;

S1:='http://softonet.com/pin=4123';
// Memo1.Lines.Append(S1);
S2:=IdHTTP1.Get(S1);
// Memo1.Lines.Append(IdHTTP1.Response.Server+': '+IdHTTP1.Response.ResponseText);
S2:='http://softonet.com/do=cat&category=soft';
// Memo1.Lines.Append(S2);

IdHTTP1.Request.Referer:=S1;
S1:=IdHTTP1.Get(S2);
// For A:=0 To IdHTTP1.CookieManager.CookieCollection.Count-1 Do
// Memo1.Lines.Append(IdHTTP1.CookieManager.CookieCollection.Items[A].CookieText);


вроде всё логично, но не пашет...
где чего добавить надо?

и снифер гонял, вроде больше сайт ничего не шлёт...
короче или я какую-то мелочь упустил или всё не так просто, как кажется

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 106.6 (ветеран), 7thx
Активность: 0.040.02
Статус: Участник

Создано: 05 августа 2008 20:35
· Личное сообщение · #2

Ну на вид вроде логично, но чудес то не бывает - раз не работает, то на уровне снифера отличия должны быть. HttpAnalyzer юзал?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 августа 2008 20:53
· Личное сообщение · #3

digger70 пишет:
HttpAnalyzer юзал?

нет Ethereal, хотя HttpAnalyzer есть, сейчас поставлю, но не думаю, что отличия будут

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 05 августа 2008 21:10
· Личное сообщение · #4

Попробуй куки вручную задать. Мне как-то раз помогло.



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 05 августа 2008 21:20
· Личное сообщение · #5

Isaev ты мну помог!!!! - я запаметовал что в индюшке куки глючат.
Вроде как в инди можно модифицировать хидер - если да то http protocol сам понимаешь

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 августа 2008 22:16
· Личное сообщение · #6

Azur1d пишет:
Попробуй куки вручную задать.

??? не понял... так они же при каждом входе разные... смысл их задавать в ручную?

Stack пишет:
я запаметовал что в индюшке куки глючат.

Что совсем безнадёжно? Лучше без инди обходиться?
а я вот как-то обычно через неё всегда всё делал... Пока с куками не столкнулся.

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 августа 2008 01:36 · Поправил: Isaev
· Личное сообщение · #7

Короче разница только в том, что Opera посылает дополнительно

Cookie2 '$Version=1'
TE 'deflate, gzip, chunked, identity, trailers'


что это и куда вставить хз... и надо ли?

Ещё POST'ом запускается 1 файлик php... Может всё дело в нём... Вряд ли наверное можно его программно запустить... или можно?

HttpAnalyzer кстати imho удобнее...

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 06 августа 2008 01:46 · Поправил: Dr3d
· Личное сообщение · #8

Cookie2 $Version=1
Это чиста оперное

TE deflate, gzip, chunked, identity, trailers
Это желательно оставить, но и без него будет работать (gzip надо убрать, если не хотите сами расшифровывать страницу)

"Запустить пхп файлик", забавно звучит. Этот файлик на сервере обрабатывается и запускается он как раз запросами типа ГЕТ или ПОСТ

А вообще встроенные компоненты - зло.
Юзайте WSA, ну или хотябы TCP-клиента, заголовки разбирать вручную, это не сложно.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 августа 2008 01:52
· Личное сообщение · #9

Dr3d пишет:
"Запустить пхп файлик", необычно звучит

согласен... но он что-то делает! В смысле можно сделать, чтобы он это делал (ну сказал)
Dr3d пишет:
А вообще встроенные компоненты - зло.

+1

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 06 августа 2008 10:57
· Личное сообщение · #10

Isaev
Попробуй еще юзерагента в инди поправить - самый надежный способ это TCPClient - стандартный делфовский его легко использовать если гет или пост без мультипартформ дата(последнее у мну никогда не выходило).

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 августа 2008 12:36 · Поправил: Isaev
· Личное сообщение · #11

я вот подумал, может просто Browser кинуть на форму и он сам прогрузит все используемые php наверное

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 106.6 (ветеран), 7thx
Активность: 0.040.02
Статус: Участник

Создано: 06 августа 2008 13:35
· Личное сообщение · #12

Isaev
Ну попробуй кинь. Но какой нафиг php - он на стороне сервера. JS еще может быть да и то результат то все равно через GET или POST уходит.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 06 августа 2008 18:09
· Личное сообщение · #13

Isaevсм пм

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 августа 2008 18:13 · Поправил: Isaev
· Личное сообщение · #14

Разобрался...
ни кто не подскажет как проверить статус интернет соединения?
пробую

function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL'

или

const
INTERNET_CONNECTION_MODEM = 1;
INTERNET_CONNECTION_LAN = 2;
INTERNET_CONNECTION_PROXY = 4;
INTERNET_CONNECTION_MODEM_BUSY = 8;

function InternetGetConnectedState(lpdwFlags: LPDWORD; dwReserved:DWORD):BOOL; stdcall; external 'wininet.dll' name 'InternetGetConnectedState';
....
function IsInternetConnected: Boolean;
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes := INTERNET_CONNECTION_MODEM or
INTERNET_CONNECTION_LAN or
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;


или

function IsInternetConnected: Boolean;
begin
Result := GetSystemMetrics(SM_NETWORK) and 1 > 0;
end;


отключаю кабель от модема, а они всё равно TRUE возвращают...
Есть другие способы?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 06 августа 2008 18:23
· Личное сообщение · #15

пингуй яндекс




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 06 августа 2008 18:31 · Поправил: ajax
· Личное сообщение · #16

Uses
WinInet;
Const
INTERNET_CONNECTION_CONFIGURED = $40;
INTERNET_CONNECTION_LAN = $02;
INTERNET_CONNECTION_MODEM = $01;
INTERNET_CONNECTION_OFFLINE = $20;
INTERNET_CONNECTION_PROXY = $04;
INTERNET_RAS_INSTALLED = $10;
Var
iState : Longword;
hHttpSession, hReqUrl : HInternet;
Begin
Result:=InternetGetConnectedState(@InetState,0);
if Result and (InetState and INTERNET_CONNECTION_CONFIGURED = INTERNET_CONNECTION_CONFIGURED) then
begin
hHttpSession:=InternetOpen(PChar(Application.Title),INTERNET_OPEN_TYPE _PRECONFIG,nil,nil,0);
try
hReqUrl:=InternetOpenURL(hHttpSession,'http://www.google.com',nil,0,0, 0);
Result:=hReqUrl <> nil;
InternetCloseHandle(hReqUrl);
finally
InternetCloseHandle(hHttpSession);
end;
end
else
if (InetState and INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE then Result:=False;
End;

Dr3d
При пинге может подниматься диалап, если настроен. Что есть не айс.

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 августа 2008 18:57
· Личное сообщение · #17

ajax всё равно TRUE...
у меня DSL Modem, наверное с ним работать по-другому надо

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 106.6 (ветеран), 7thx
Активность: 0.040.02
Статус: Участник

Создано: 06 августа 2008 20:25
· Личное сообщение · #18

Isaev пишет:
ни кто не подскажет как проверить статус интернет соединения?

Из опыта - сугубо по ответу (или тайм-ауту) сайта, с которым общаешся.



Ранг: 54.9 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 06 августа 2008 20:28 · Поправил: xShadow
· Личное сообщение · #19

Indy зло, поищи clever internet suite

__tp://rapidshare.com/files/87742921/CIS.v6.2.145.19.rar



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 06 августа 2008 21:28
· Личное сообщение · #20

xShadow пишет:
Indy зло

Ну как посмотреть. ИМХО, вполне нормальные компоненты.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 06 августа 2008 22:38 · Поправил: Isaev
· Личное сообщение · #21

Dr3d пишет:
встроенные компоненты - зло.

xShadow пишет:
Indy зло

одно зло вокруг!

xShadow поставил... Гигант! Пока попробую без него обойтись.
а про synapse кто что скажет?

Dr3d пишет:
пингуй яндекс

нашёл примерчик ping'а на 2 страницы - жуть, но работает

Нужен чекер инета!
Чтобы чекал безошибочно, на таймере 2сек (он конечно не будет так работать, но чтобы успевал) и не подвешивал приложение


-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 07 августа 2008 11:07
· Личное сообщение · #22

synapse - суперрулез для компактных программ.
вот еще примерчик через соксы, но смысл тот же - проверка внешки.
www.swissdelphicenter.ch/torry/showcode.php?id=342

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 07 августа 2008 20:46
· Личное сообщение · #23

ajax пишет:
но смысл тот же

видимо не тот же... предыдущие примеры показывали вечный online, а этот - вечный offline

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 3.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 августа 2008 10:31
· Личное сообщение · #24

Всем доброго дня! Редко пишу на этом форуме, но тут возник вопрос, схожий с названием данной темы.
Есть ли какие библиотеки для работы с http-пакетами как со структурами? Для получения, напр., адреса хоста, или еще какого параметра... Можно, конешна, самому это по бырому накатать, но зачем мне велосипед? Спрашиваю про стадартные апи, поэтому язык - побоку.
Извините, что вклинился. Заранее, сенкс!



Ранг: 69.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 08 августа 2008 19:10
· Личное сообщение · #25

Isaev,
делал тулзу для себя "ShowIP", показывает
Local IP, WAN IP, HOST и DNS (DNS - вбиваешь
интернет адрес, креклаб, к примеру и программа возвращает IP),
при отсутствии соединения, выпрыгивает окно с ошибкой "Socket-Fehler бла-бла",
подкоррегировал на "You have no internet connection!!! Socket-Fehler бла-бла",
обработка этой ошибки где-то в исходниках indy, по моему, ( у меня indy 9.0.18 стоит).
Пользительная тулза для Peer-To-Peer, работает и через фаервол и через роутер.
Сорцы сборные, где-то в интернете надёргал, в архиве сорцы для делфи и прога.

86db_08.08.2008_CRACKLAB.rU.tgz - ShowIP.zip




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 27 апреля 2010 05:28 · Поправил: Isaev
· Личное сообщение · #26

Delphi, Indy, Get: Если в RawStream получаю несколько "Set-Cookie", например:
Code:
  1. ...
  2. Set-Cookie: ASP.NET_SessionId=vnpglwqnslawyu3xgmchk2na; path=/; HttpOnly
  3. Set-Cookie: ccskey=OtC.L5WXMRTYFpTvRQcC; domain=google.com; expires=Wed, 27-Apr-2011 01:27:52 GMT; path=/
  4. ...

Как проще их вытащить и установить?

CookieManager цепляет только первую, на остальное забивает!

доставал так:
Code:
  1. For N:=0 To Form1.IdHTTP1.Response.RawHeaders.Count-1 Do
  2.     Begin
  3.       If Form1.IdHTTP1.Response.RawHeaders.Names[N]='Set-Cookie' Then
  4.         Begin
  5.           Form1.Memo.Lines.Append(Form1.IdHTTP1.Response.RawHeaders.ValueFromInd ex[N]);
  6.           //Вставить куки
  7.         End;
  8.     End;


а как их в ручную вставить вообще?
так не ставятся:
Code:
  1. Form1.IdCMan.CookieCollection.Add;
  2. Form1.IdCMan.CookieCollection.Items[0].CookieName:='ASP.NET_SessionId'  ;
  3. Form1.IdCMan.CookieCollection.Items[0].Value:='vnpglwqnslawyu3xgmchk2n a';
  4. Form1.IdCMan.CookieCollection.Items[0].Path:='/';


так тоже не ставятся:
Code:
  1. Form1.IdCMan.CookieCollection.Add.CookieText:='ASP.NET_SessionId= vnpglwqnslawyu3xgmchk2na; path=/';


и так не ставятся:
Code:
  1. Form1.IdCMan.CookieCollection.AddSrcCookie('ASP.NET_SessionId=vnp glwqnslawyu3xgmchk2na; path=/');


И вообще это всё как-то громоздко и заморочено... Есть способы проще?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 27 апреля 2010 09:54 · Поправил: Azur1d
· Личное сообщение · #27

Code:
  1. Form1.IdCMan.AddCookie('ASP.NET_SessionId=vnp glwqnslawyu3xgmchk2na', 'host.domain');


И еще в последнем примере у тебя в куки пробел, Если в коде он тоже есть, то такая кука памойму не встанет.

З.Ы. Где-то выше отсылали к Synapse. Попробуй ее, реально хорошая вещь. С инди на нее переходить не привычно, т.к. почти все заголовки нужно вручную писать. Но зато не бывает "странных глюков".




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 27 апреля 2010 17:27
· Личное сообщение · #28

Azur1d пишет:
И еще в последнем примере у тебя в куки пробел, Если в коде он тоже есть, то такая кука памойму не встанет.

нет пробелы форум расставляет

Azur1d пишет:
Где-то выше отсылали к Synapse. Попробуй ее, реально хорошая вещь.

да надо наверное, часто слышу лестные отзывы.

спс, так цепляются

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 31 марта 2012 17:29 · Поправил: Isaev
· Личное сообщение · #29

А в Synapse откуда вытаскиваются Set-Cookies в ответе?
Если в инди они в IdHTTP1.Response.RawHeaders, то а Synapse я вообще не нашёл в чём они возвращаются и не гуглится ничего


PS: А всё, нашёл... в headers всё там возвращается, спасибо всем )

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 31 марта 2012 20:35 · Поправил: vptrlx
· Личное сообщение · #30

Ну коротко это делается так:
Code:
  1.   IdHttp1.CookieManager.AddCookie('a=b','exelab.ru ');
  2.   IdHTTP1.CookieManager.CookieCollection.Items[0].Path := '/';
  3.   IdHttp1.Get('http://exelab.ru');


А подключение к интернету, кажется, необходимое условие для успеха функции WinHttpOpen:
Code:
  1. DWORD dwData = 300000;
  2. WinHttpSetOption( hInt, WINHTTP_OPTION_CONNECT_TIMEOUT, &dwData, 4 );
  3. hInt = WinHttpOpen(_T("MSIE6.0"), WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, 0, 0, 0);

Но тут могу ошибаться, проверить сейчас не могу.


. 1 . 2 . >>
 eXeL@B —› Программирование —› GET (POST) +Cookies [Delphi]
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати