Правка заголовка

Тема в разделе "Регулярные выражения", создана пользователем droid, 12 апр 2017.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. droid

    droid Создатель

    Регистр.:
    2 авг 2011
    Сообщения:
    37
    Симпатии:
    4
    Парни привет.
    Вопрос возник с регуляркой по замене значений в заголовке HTTP запроса (GET\POST)
    Я хочу менять Cookie на мой вне зависимости от того есть он в запросе или нет. Идея следующая если есть параметр Cookie заменить на мой, если нет то дописать мой парметр Cookie.
    Пробовал сделать (^Cookie:.*$)? но не работает. Точнее работает только в запросах когда есть Cookie, а если его нет то не работает замена. Помогите составить.
     
    Последнее редактирование: 12 апр 2017
  2. Delk0

    Delk0

    Регистр.:
    26 мар 2010
    Сообщения:
    291
    Симпатии:
    57
    Конечно замена не будет работать если нет нужной куки и нечего заменять.
    Нужно заменить какую-то конкретную куку?
    Лучше проверять наличие нужной куки и если ее нет - устанавливать свою через дополнительный заголовок.
    Хотелось бы увидеть кусок кода, который заменяет. Тогда будет нагляднее.
     
  3. droid

    droid Создатель

    Регистр.:
    2 авг 2011
    Сообщения:
    37
    Симпатии:
    4
    Да нет кода. Это на лету в проксе(3proxy) делаю.
    План конечно родился удалить куки, затем дописать куки.
    Надо 2 правила
    соответсвенно первое вроде (^Cookie:.*$)? заменяю на "", но тогда надо почистить заголовок от перевода строки и дописать внизу свою куку.
    Может подскажете как выбрать весь заголовок и дописать куки?

    Давайте дам сразу реальные данные, думаю так будет лечге. Я хочу, чтоб при запросе от пользователя летела кука что он прошёл через проксю, все остальное надо отрезать.
    Пробовал вот так (^(Cookie:.*)$)|(^(Upgrade-Insecure-Requests:(.*)\R))
    Вот такой у меня запрос:
    Код:
    GET / HTTP/1.1
    Host: hwstat.mon.local
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    DNT: 1
    Cookie: TeST=bb
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    Connection: keep-alive
    
    Логика такая, что если у меня есть куки меняем его на мою строчку Cookie: proxy=yes,
    если куки нет то надо дописать Cookie: proxy=yes после Upgrade-Insecure-Requests: 1.
    Но на данный моент это не работет.
    Код:
    GET / HTTP/1.1
    Host: hwstat.mon.local
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    DNT: 1
    
    GET / HTTP/1.1
    Host: hwstat.mon.local
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    DNT: 1
    
    
    Upgrade-Insecure-Requests:  1
    Cookie: proxy=yes
    Cache-Control: max-age=0
    Connection: keep-alive
    
     
    Последнее редактирование модератором: 20 апр 2017
  4. Delk0

    Delk0

    Регистр.:
    26 мар 2010
    Сообщения:
    291
    Симпатии:
    57
    Т.е. остальные куки надо вырезать в любом случае?
    Тогда можно удалить все куки на первом шаге, а на втором заменить Upgrade-Insecure-Requests: 1 на
    Upgrade-Insecure-Requests: 1
    Cookie: proxy=yes
     
    Последнее редактирование: 14 апр 2017
  5. droid

    droid Создатель

    Регистр.:
    2 авг 2011
    Сообщения:
    37
    Симпатии:
    4
    Пробовал, но тут жо. Вырезаю куки, получаю перевод строки лишний который ломает заголовок.
     
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    229
    Симпатии:
    305
    Код:
    \A(?:[^\r\n]+\K(\r?\n)?)+?(?i:Cookie:[^\r\n]*|\K\Z)
    
    $1Cookie: proxy=yes
    https://regex101.com/r/4SNCWs/1
    https://regex101.com/r/4SNCWs/2
     
    droid нравится это.
  7. droid

    droid Создатель

    Регистр.:
    2 авг 2011
    Сообщения:
    37
    Симпатии:
    4
    lag Ваша строка опупительна. Читал объяснение на страницах - круть. Снимаю шляпу.
    К сожалению она не завелась(у меня perl), продолжаю эксперементы по её вкручиванию в эллегантное решение.
    Делаю 2 прохода
    Код:
    (^Cookie:(.*)$)(.*)" "$3"
    
    второй
    Код:
    "(^Upgrade-Insecure-Requests:(.*)$)" "Cookie: proxy=yes\r\nUpgrade-Insecure-Requests: $2"
    
    надо было ^ затащить во внутрь скобок тогда удаётся избавиться от повторений.
     
    Последнее редактирование: 14 апр 2017
  8. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    229
    Симпатии:
    305
    А почему perl? Там вроде замена производится через плагин PCREPlugin который использует ту же самую библиотеку что и php.
     
  9. droid

    droid Создатель

    Регистр.:
    2 авг 2011
    Сообщения:
    37
    Симпатии:
    4
    Возможно я не прав, но вроде по сырцам прикручено от перла.
    Код:
    pcre_rewrite cliheader dunno "\A(?:[^\r\n]+\K(\r?\n)?)+?(?i:Cookie:[^\r\n]*|\K\Z)" "$1Cookie: proxy=yes" 
    
    вот такая в итоге строка
    вот включеные опции
    Код:
    pcre_options PCRE_CASELESS PCRE_MULTILINE PCRE_NEWLINE_ANYCRLF
    
    Ни с куками ни без них не работает. Отключение опций не помогает
     
  10. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    229
    Симпатии:
    305
    А если попробовать на версии 0.9b-devel
    Код:
    pcre_rewrite cliheader dunno "\A(?:.+\n)+?\K(?i:Cookie:.*\n|\z)" "Cookie: proxy=yes\r\n"
     
    droid нравится это.
Статус темы:
Закрыта.