Notes |
|
(0000871)
|
Garl
|
10-01-2011 18:24
(edited on: 10-01-2011 18:38) |
|
тогда у нас получится нормально тянуть космоснимки.
так же хотелось бы менять user-agent
|
|
|
|
>получится нормально тянуть космоснимки.
...и обойти бан в гугле (там динамический токен в хидерах отдавать надо, и никакого бана не будет), и многое другое тоже... :) |
|
|
(0001367)
|
Tolik
|
23-03-2011 07:00
|
|
Хотелось бы поскорее получить возможность указывать заголовки в параметрах карты.
Может быть, хотя бы реализовать для начала статические, такие как referer, user-agent и т.п.
Давайте обсудим, как это должно выглядеть.
Например, в params.txt добавить поля:
referer
user-agent
cookie
keep-alive
connection
?
?
Либо добавить одно поле headers, в которое можно вставлять какие угодно заголовки?
Также надо бы составить список переменных для GetUrlScript |
|
|
|
Господа, не нужно обсуждать посторонние продукты и рапортовать об удачах\неудачах с ними - в хотелке к сасу. Для этого есть форум, а тут - именно прикручивание конкретного функционала именно к сасу.
Почищено. |
|
|
(0001414)
|
gpsMax
|
26-03-2011 16:23
|
|
Упоминание "посторонних продуктов"(хех, прямо как Майкрософт) имеет целью показать, что хотелка эта не самая горящая, и большей частью реализуемая обходными средствами. |
|
|
(0001419)
|
Tolik
|
26-03-2011 20:40
|
|
"Посторонний продукт" (Proxomitron) - это костыль, а хотелка-таки горящая, позволит создавать нормальные, рабочие zmp. |
|
|
|
>что хотелка эта не самая горящая, и большей частью реализуемая обходными средствами
Абсолютно любая из скреативленных тут хотелок может быть реализована обходными средствами (включая и весь САС как таковой) - что, собственно, постоянно и делается. Но это еще не значит, что в темах оных хотелок К САСу нужно устраивать анархию и ломки копий по СТОРОННИМ вариантам решения.
В очередной раз напоминаю, что багтреккер предназначен для обсуждений конкретных доработок именно САСа, и ни шагом в сторону. Все "обходные варианты" и прочие костыли просьба пилить на форуме. |
|
|
(0001601)
|
zed
|
07-04-2011 15:05
(edited on: 07-04-2011 15:08) |
|
В скриптах теперь будет доступна строковая переменная RequestHead, которой можно присваивать хидеры (а можно и не трогать, тогда будут дефолтные).
Пример использования:
RequestHead := 'User-Agent: Some User Agent' +#$0D#$0A+'Referer: www.test.com'+#$0D#$0A;
|
|
|
(0001602)
|
Tolik
|
07-04-2011 15:59
|
|
|
|
(0001603)
|
zed
|
07-04-2011 16:05
|
|
|
|
(0001604)
|
gpsMax
|
07-04-2011 17:03
|
|
А динамически изменять эту переменную можно? |
|
|
(0001605)
|
zed
|
07-04-2011 17:58
|
|
Опишите вариант "динамического" изменения, а то не очень понятно что имеется в виду. ResultUrl вы можете изменять динамически? Вот с RequestHead будет точно так же. |
|
|
|
Для работы с куками\сессиями нужна возможность где-то хранить оные куки\сессии в пределах нескольких запросов САС<->скрипт либо в пределах времени валидности данной сессии\куки. На настоящий момент, как я понимаю, скрипт переинициализируется при каждом новом вызове его САСом? Тогда придется тянуть по новой куке каждый раз при вызове скрипта (читай: на каждый тайл просить по куке).
Можно конечно писать куку+таймштамп в темп-файл и читать со скрипта при к.вызове, но это сработает лишь в один поток скачки. Как только появится второй поток скачки на тот же сервис - поимеем траблов с доступом к темп-файлу. Можно также писать и в БД - но это весьма сильное усложнение всей задачи, хоть работать конечно и будет.
В идеале, надо бы возможность отправлять пользовательские данные в САС как в буфер, а при следующем вызове скрипта - отдавать скрипту также и этот буфер. Будет там кука, специальные хидеры или "Тут был Вася™" - это разбирать на нужные параметры уже в самом скрипте. От САСа требуется лишь получать от скрипта _возможные_ данные, и при их наличии - отдавать это всё следующему скрипту при его инициализации, всё. Разбивка этого блока данных на пары "параметр:значение" - на усмотрение скриптопейсателя.
PS: так же можно передавать между разными вызовами скриптов и ранее запрошенные другим оратором дескрипторы, и что угодно еще появится там в будущем (но что-то мне подсказывает, что при выходе из скрипта PHP таки автоматически закроет все открытые коннекты\дескрипторы\хэндлеры за собой. Но не уверен, утверждать не возьмусь). |
|
|
(0001609)
|
zed
|
08-04-2011 09:19
|
|
Parasite, у тебя всё смешалось в кучу - и люди, и кони.
Каким боком БД и дескрипторы PHP в паскаль-скриптах, о коих здесь, собственно, и речь? |
|
|
|
>дескрипторы PHP в паскаль-скриптах, о коих здесь, собственно, и речь?
Покажи мне выше в теме хоть одно слово "Паскаль"? Единственные скрипты, которыми ты занимался в плане САСа - это PHP-скрипты. Я так и понял, что речь пошла именно про них. Если сие не так - надо было прямо и указывать, что конкретно пилим.
PS: предыдущая моя мессага была именно за PHP, да. Если тут за Паскаль - удаляем пост (но про PHP ты таки имей ввиду тем не менее, вышеописанные грабли-то никуда не денутся...) |
|
|
(0001614)
|
zed
|
08-04-2011 10:51
|
|
Не важно чем я занимался или занимаюсь. Ты просил дать возможность в GetUrlScript (а это ничто иное, как паскаль-скрипт) влиять на хидеры запросов. Теперь такая возможность будет.
P.S. Если что, добавить фичу оказалось довольно легко - на весь процесс, включая тестирование, ушло не более получаса, так что от PHP я сильно не отвлекался. |
|
|
(0001616)
|
gpsMax
|
08-04-2011 11:05
|
|
>Опишите вариант "динамического" изменения, а то не очень понятно что имеется в виду.
Да, я имел в виду именно тупо возможность изменения, спасибо. Parasite, однако, поднял хороший вопрос про сессии. |
|
|
(0001624)
|
zed
|
08-04-2011 14:21
|
|
И откуда планируется эту самую сессию брать? Её ведь, чтоб передать из одного скрипта в другой (что само по себе элементарно и занимает не более 5 мин. кодинга), нужно наполнить ещё какими-то данными?
В любом случае, это будет уже совершенно новая хотелка.
И, к слову, для тех кто невнимательно следит за процессом прикручивания PHP: там с передачей сиссий между скриптами уже сейчас нет никаких проблем. |
|
|
|
Zed я эти твои последние изменения включу в релиз, но ты их реально тестил? Смотрел чего там гуляет по сети? Просто юзер агент передается не при запросе конкретного тайла, а при подключении к серверу, насколько я помню. И ты его не убирал. |
|
|
(0001653)
|
zed
|
09-04-2011 08:56
|
|
>но ты их реально тестил
Естественно.
>Просто юзер агент передается не при запросе конкретного тайла, а при подключении к серверу
Не передаётся, а устанавливается. Это разные вещи. Устанавливается он где-то в глубинах свойств wininet, и затем при запросе каждого тайла извлекается из глубин и только потом передаётся серверу (всё средствами самого wininet).
Хидеры там (в SAS) тоже не передаются, а устанавливаются. И юзер агент из установленных хидеров имеет приоритет перед установленным ранее юзер-агентом. Так что, в конечном итоге на сервер всё уходит правильно.
>И ты его не убирал.
Да, иначе его пришлось бы писать в каждом скрипте, а так - лишь при желании его переопределить. |
|
|
|
Ну я бы еще добавил подчитывание юзерагента и дефолтных хидеров из змп. И возомжно стоит добавить их хранение в maps.ini по аналогии с BaseUrl и возможность редактирования в параметрах карты. |
|
|
(0001657)
|
Tolik
|
09-04-2011 09:38
|
|
Давайте я потестирую этот билд |
|
|
|
>Не важно чем я занимался или занимаюсь. Ты просил дать возможность в GetUrlScript (а это ничто иное, как паскаль-скрипт)
На момент создания тикета никаких разговоров про скрипты к САСу не было ВООБЩЕ, и тикет написан именно с того положения дел.
Потом (на момент появления последующего камента) они уже были, и были про PHP, и были по счастливой случайности именно от тебя. А по телепатии у меня всегда была тройка. :)
>И откуда планируется эту самую сессию брать?
Из самого первого вызова скрипта, кой (не получив буфера от САСа) ее и заполнит и отдаст в буфер, и этот буфер потянется во все последующие вызовы - периодически меняясь во времени, когда куку надо будет обновлять. Это уже задача скрипта - передавать и таймштампы, и что угодно еще. Было бы через что передавать.
PS: господа, а тикет http://sasgis.org/mantis/view.php?id=365 - с данным связан, или пускай отдельно валяется? А то я б прилинковал бы сюда и его тоже. |
|
|
(0001667)
|
zed
|
09-04-2011 16:53
|
|
vdemidov
>Ну я бы еще добавил подчитывание юзерагента и дефолтных хидеров из змп
Это по-моему лишнее - хидеры определяются один раз и в ручном редактировании уже не нуждаются (это ведь не url, в котором версии меняются через неделю). А если вдруг и захочется поправить что-то - ручками в zmp. Но это крайне редкая и маловероятная ситуация, чтоб ради неё разводить кучу настроек.
Parasite
>Было бы через что передавать.
Нет, как раз наоборот - было бы ЧТО передавать, а передать не проблема. На данный момент у паскаль-скриптов сильно ограничены возможности в плане "получить от сервера куки". Или точнее, такой возможности вообще нет, потому и возможность хранить что-то в буфере и передавать между скриптами на ДАННЫЙ момент абсолютно бесполезна.
>господа, а тикет http://sasgis.org/mantis/view.php?id=365 [^] - с данным связан
Нет. Да и работает оно вроде по https.
Моё мнение - с этой хотелкой покончено, можно закрывать как решённую. Но наравне с хотелкой 0000379 (про post запросы) нужно открывать новую, про получение cookie от сервера и там уже разводить холивары про что да как. |
|
|
|
>Это по-моему лишнее - хидеры определяются один раз и в ручном редактировании уже не нуждаются
Ну это может понадобиться например, что бы задавать можно было куку руками. Пригодится для особо клинических способов задания куки джаваскриптами. Тоесть смотрим в браузере куку и вбиваем в настройки карты. А если вбибвать можно будет только в скрипте придется перезапускать программу. |
|
|
(0001670)
|
zed
|
09-04-2011 17:39
|
|
>куку руками
Действительно клинический случай. Но с другой стороны - открыть браузер, запустить нужную карту, проснифить запрос, скопировать куки - довольно много действий, и перезапуск SAS и редактирование zmp не самые трудные из них. Хотя, закачка наверное тормознётся.
В любом случае, в GUI я пока что лезть опасаюсь, так что это без меня как-нибудь. |
|
|
(0001671)
|
Tolik
|
09-04-2011 17:46
|
|
Хотя в большинстве случаев хватило бы и статического определения хедеров в params.txt, данное решение (RequestHead) мне кажется вполне универсальным и достаточным.
Кстати, вопрос о синтаксисе: можно ли использовать \r\n или только #$0D#$0A? |
|
|
(0001672)
|
zed
|
09-04-2011 17:47
(edited on: 09-04-2011 17:51) |
|
>можно ли использовать \r\n
Нет.
P.S. Вот она "прелесть" паскаль-скриптов - разрешено лишь то, о чём явно позаботился разработчик. Шаг в сторону - расстрел. (с)
|
|
|
|
> открыть браузер, запустить нужную карту, проснифить запрос, скопировать куки
Обычно снифить не нужно. В той же опере можно посмотреть установленные для текущей страницы куки. |
|
|
|
>как раз наоборот - было бы ЧТО передавать, а передать не проблема. На данный момент у паскаль-скриптов сильно ограничены
Вроде ж выяснили выше, что про передачу куков между скриптами было [ошибочно] запощено касаемо PHP, а не паскаля. Про паскаль я пас, не в теме.
Может отделить этот вопрос (касаемо PHP) тебе в тему на форум? А то тут от него одна путаница, а стирать неохота - вопрос таки требует твоего внимания. |
|
|
(0001676)
|
zed
|
09-04-2011 20:11
|
|
>Вроде ж выяснили выше, что про передачу куков между скриптами было [ошибочно] запощено касаемо PHP
О, я ж вроде бы ясно сказал, что здесь разговор ТОЛЬКО про паскаль-скрипты. Никаких PHP я и близко не упоминал, что ты к ним тут привязался?
>Может отделить этот вопрос (касаемо PHP) тебе в тему на форум?
Отделять ничего не надо. Там эти вопросы уже решены. |
|
|
(0001719)
|
zed
|
10-04-2011 19:01
|
|
А, гулять так гулять! Сделал возможность получать хидеры ответа сервера - будут в переменной ResponseHead, и добавил буфер в который можно писать что-нибудь и передавать в скрипт при следующем запуске (строковая переменная ScriptBuffer).
Теперь, наверное, надо будет добавить пару функций для работы со строками: length, pos, copy, и если уж совсем разгуляться - добавить регэкспы? |
|
|
|
Да это просто праздник какой-то.... |
|
|
(0001731)
|
Tolik
|
11-04-2011 05:48
(edited on: 11-04-2011 05:49) |
|
ResponseHead - это строка, в ней все хедеры, разделённые \n\r?
Может ещё и парсер прикрутите? :) (Или он уже есть?)
Прям руки чешутся попробовать :)
|
|
|
(0001754)
|
zed
|
11-04-2011 11:17
|
|
>ResponseHead - это строка, в ней все хедеры, разделённые \n\r?
Да.
>Может ещё и парсер прикрутите
Что он должен делать конкретно и в каком виде должен получиться результат? |
|
|
(0001755)
|
Tolik
|
11-04-2011 11:29
|
|
Результат - например,
ParseHeader(ResponseHead, "Content-Type") = "image/jpeg". Типа того. |
|
|
(0001778)
|
zed
|
11-04-2011 20:01
(edited on: 11-04-2011 20:04) |
|
Добавил 7 функций для работы со строками:
function Length(Str: string): integer
function GetAfter(SubStr, Str: string): string
function GetBefore(SubStr, Str: string): string
function GetBetween(Str, After, Before: string): string
function SubStrPos(const Str, SubStr: String; FromPos: integer): integer
function RegExprGetMatchSubStr(const Str, MatchExpr: string): string
function RegExprReplaseMatchSubStr(const Str, MatchExpr, Replase: string): string
Пример использования:
const
CRLF = #$D#$A;
begin
Astr := 'Connection: Close' + CRLF + 'User-Agent: TestUserAgent' + CRLF;
'Length=' + inttostr(Length(AStr)) + CRLF +
'GetAfter=' + GetAfter('User-Agent', AStr) + CRLF +
'GetBefore=' + GetBefore('User-Agent', AStr) + CRLF +
'GetBetween=' + GetBetween(AStr, 'Connection', 'User-Agent') + CRLF +
'SubStrPos=' + inttostr(SubStrPos(AStr, CRLF, 20)) + CRLF +
'RegExprGetMatchSubStr=' + RegExprGetMatchSubStr(AStr, 'Connection:(.*?)\r\n') + CRLF +
'RegExprReplaseMatchSubStr=' + RegExprReplaseMatchSubStr(AStr, 'Connection:(.*?)\r\n', 'Connection: Keep-Alive'+CRLF);
Результат:
Length=46
GetAfter=: TestUserAgent#$D#$A
GetBefore=Connection: Close#$D#$A
GetBetween=: Close#$D#$A
SubStrPos=45
RegExprGetMatchSubStr= Close
RegExprReplaseMatchSubStr=Connection: Keep-Alive#$D#$AUser-Agent: TestUserAgent#$D#$A
Так же, доступны стандартные функции copy (http://www.delphibasics.ru/Copy.php) и pos (http://www.delphibasics.ru/Pos.php)
|
|
|
(0001780)
|
gpsMax
|
11-04-2011 20:14
|
|
Круто. Только чуть косметически допилить вот это:
> GetAfter=: TestUserAgent#$D#$A
Народ, в общем-то, интересует получить из ответа значение заголовка по его имени. Собственно, это писали и выше. Чтобы каждый раз не писать лишние конструкции, нужна отдельная целевая функция, типа
GetHeader('User-Agent', AStr)
Вот отпилить от результата с GetAfter двоеточие, пробел(возможно, его не будет или он будет не один), и перенос строки, и будет конфетка. |
|
|
(0001783)
|
zed
|
11-04-2011 20:33
|
|
Более универсальная функция RegExprGetMatchSubStr - составляете регулярное выражение и получаете искомое. |
|
|
(0001784)
|
gpsMax
|
11-04-2011 21:01
|
|
Универсальная, но не удобная. |
|
|
(0001789)
|
Tolik
|
12-04-2011 04:03
(edited on: 12-04-2011 04:09) |
|
> GetHeader('User-Agent', AStr)
В точности то же двумя постами выше (note 1755).
Однако мы увлеклись теорией. Можно написать сколько угодно функций, а реально это нужно?
В какой конкретно карте мы будем (точнее, нам необходимо) анализировать заголовки response?
Parasite упоминал какие-то хитрые куки в Гугле, что именно нужно для их вычисления?
> function RegExprReplaseMatchSubStr(const Str, MatchExpr, Replase: string): string
Пожалуйста, исправьте replase на replace
(please replace replase with replace :))
|
|
|
|
>Результат - например, ParseHeader(ResponseHead, "Content-Type") = "image/jpeg". Типа того.
Читай: не зная названия конкретного поля - ты его и не узнаешь, пока в сниффер (сторонний продукт, от которых мы и желаем избавляться тут) не полезешь и не увидишь как он пишется и что конкретно отдает. :)
Получая же весь массив заголовков в скрипт - получаем все поля текстом, разбирай\парсь скриптом какие угодно и как угодно - не хочу. Любые возможные извращения на лету при парсинге опять же - доступны, а не только так как соизволит скомпилированный (неизменяемый) САСовский парсер.
>Parasite упоминал какие-то хитрые куки в Гугле, что именно нужно для их вычисления?
Нужны просто ровные руки и парсер строки из текста (на Перле - половина строчки регекспом), плюс возможность манипуляции хидерами на базе выпарсенных строк. :) Также нужна возможность запрашивать посторонние УРЛы, а не только графику начинающуюся с BaseURL - в частности, веб-страницы (Content-Type: text/html) и уметь с ними работать как с текстом.
PS: Вопрос тонкой ломки Гугля, как я понимаю - выходит за рамки данного тикета. |
|
|
(0001798)
|
Tolik
|
12-04-2011 04:53
|
|
Вопрос ломки гугла, конечно, выходит. А вопрос о необходимых для этого инструментах как раз сюда.
Достаточно ли для этого ResponseHead, RequestHead и прямых рук?
Я так понял, что нет, нужно ещё формировать посторонние запросы, т.е. в рамках данного тикета проблему не решить? |
|
|
|
>нужно ещё формировать посторонние запросы, т.е. в рамках данного тикета проблему не решить?
На паскальскрипте - без понятия, я на нем почти не размовляю. На ранееупомянутом PHP\Перле сабж делается буквально за 10-15минут с перерывами на пиво.
Для гугла - да, понадобятся посторонние запросы. Для других сервисов - зависит уже от них. В любом случае - сабж нужный и полезный хотя бы для переназначения Referrer\UserAgent и проч (что обычно делается разово и доп.запросы в этом случае не нужны).
А для более сложных случаев (типа Гугла, или вон vdemidov куки с яваскрипта упоминал) - там уже надо будет развивать тему. Предлагаю сперва ввести и отладить возможность "чуть менее чем статичных" хидеров. :) |
|
|
(0001802)
|
Tolik
|
12-04-2011 05:42
|
|
В таком случае ПОКА нам достаточно строки RequestHead.
ResponseHead и строковые функции, конечно, пусть тоже будут, может и пригодятся.
Пора в релиз ;) |
|
|
(0001825)
|
zed
|
12-04-2011 15:14
(edited on: 12-04-2011 15:15) |
|
>Пожалуйста, исправьте replase на replace
Исправил.
Добавил так же возможность устанавливать хидеры и из zmp:
RequestHead=Referer: maps.kosmosnimki.ru#13#10
|
|
|
(0001829)
|
Tolik
|
12-04-2011 15:46
|
|
Без кавычек? А если несколько хедеров, то как писать? Всё в одну строку? Лимита на длину нет?
А если и в params.txt, и в GetUrlScript.txt вставить RequestHead, какой будет результат?
Вы уж, пожалуйста, не забудьте к релизу подготовить описание всех нововведений. |
|
|
(0001832)
|
zed
|
12-04-2011 17:28
|
|
Немного подправил, теперь нужно писать так: RequestHead=Referer: maps.kosmosnimki.ru\r\nConnection: Close\r\n (всё в одну строку, без всяких кавычек. Разделитель строк (\r\n) в самом конце можно не ставить)
>А если и в params.txt, и в GetUrlScript.txt вставить RequestHead, какой будет результат?
Из GetUrlScript.txt |
|
|
(0001838)
|
Garl
|
12-04-2011 18:44
|
|
длина строки учитывается? а то у мну набирается длина больше 400 символов в строке. |
|
|
(0001839)
|
zed
|
12-04-2011 19:45
|
|
Да вроде если не более 1024 байт должно отрабатывать без вопросов. А дальше - опытным путём. |
|