beldmit: (Программизм)
[personal profile] beldmit
Все, кто читает этот пост в ЖЖ, читают ЖЖ. А значит, много раз видели адресные URL из потрохов, которые содержат в себе исходный URL, а вокруг - много мусора в html escaping. Нажатие "Обновить" не помогает, потому что в СУПе то ли люди с непрямыми руками, то ли они так от чего-то защищаются. Во всяком случае, на жалобу в своё время они мне ответили что-то невразумительное.

Собственно, возникает это, когда обламывается один из минимум 3-4 редиректов, которые ЖЖ делает при отображении страницы для залогиненного пользователя (для незалогиненного - не знаю). При нагрузках, какой-нибудь еще хрени и так далее. Соответственно, при моей манере чтения фленты это штук 5 страниц с такими URL и 503 Varnish error вместо контента.

Как я понимаю, для Chrome и FF несложно сделать плагин, который будет восстанавливать исходный URL и делать запрос на него. Собственно, кто может ткнуть пальцем в описание того, как это сделать?

UPD: пример того, что остаётся в URL. Устаревший, но то, что бывает сейчас, принципиально не отличается.
http://www.livejournal.com/misc/get_domain_session.bml?return=http%3A%2F%2Fphiltrius.livejournal.com%2F867320.html&sign=2d07c4876bfa6ce276aee340aaef40ca&t=1366874215

Date: 2014-12-16 01:11 pm (UTC)
From: [identity profile] slobin.livejournal.com
Я не смог по твоему описанию понять, о чём речь. Окрошка из слов какая-то, извини. "адресные URL" -- а какие ещё бывают? Но вообще грисманка рулит!

... The hinge of armoring is important internal source ...

Date: 2014-12-16 01:27 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Когда ты открываешь URL в ЖЖ, он тебя гоняет через несколько редиректов. Если один из редиректов не сработает, получаем хрень в URL, из которой можно восстановить исходный URL, и, например, любимую ошибку 503 Varnish error на экране.

Date: 2014-12-16 01:22 pm (UTC)
From: [identity profile] aywen.livejournal.com
Смотрю на урл. Никакого мусора не вижу.

Date: 2014-12-16 01:27 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Когда ты открываешь URL в ЖЖ, он тебя гоняет через несколько редиректов. Если один из редиректов не сработает, получаем хрень в URL, из которой можно восстановить исходный URL, и, например, любимую ошибку 503 Varnish error на экране.

Date: 2014-12-16 01:32 pm (UTC)
From: [identity profile] maksa.livejournal.com
Можешь привести пример? Я не припоминаю, чтобы хоть сколько-нибудь регулярно видел подобное.

Date: 2014-12-16 01:38 pm (UTC)
From: [identity profile] beldmit.livejournal.com
См. update

Date: 2014-12-16 01:58 pm (UTC)
ext_613079: Default userpic (Бритый небритый)
From: [identity profile] shaplov.livejournal.com
Это следы работы инструмента по передаче авторизации доменам третьего уровня. В ЖЖ когда-то была проблема с тем, что можно было увести авторизационную сессию юзера зашедшего к тебе на страницу. Поэтому они для каждого журнала сделали по отдельной сессии, замеченные тобой редиректы -- это как раз часть действия алгоритма: редиректнуться на авторизцаионный центр, получить куку для интересующего домена, редиректнуться обратно, уже локально авторизованным. При этом даже если владелец журнала сопрет куку, то работать она будет только для его журнала, что очень уж неинтересно...

Надо ли с этим вообще бороться -- крайне не очевидно....
Edited Date: 2014-12-16 01:59 pm (UTC)

Date: 2014-12-16 02:00 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Это я примерно понимаю. Я хочу написать решение "одной кнопкой", которое будет выкусывать правильную часть из URL.

Date: 2014-12-16 02:06 pm (UTC)
ext_613079: Default userpic (Бритый небритый)
From: [identity profile] shaplov.livejournal.com
А нажать бэк и зайти еще раз не помогает?
Потому что если ты выкусишь правильный url а куки не получишь, тебя опять в авторизационный центр направят...

А, понял, у тебя проблема в том что ты открыл в новом окне, что не загрузилось не посмотрел, а источник утерян...
Edited Date: 2014-12-16 02:07 pm (UTC)

Date: 2014-12-16 02:08 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Back не помогает. А так - пусть направляет. Меня напрягает необходимость ручной резьбы по мягкой игрушке, когда ЖЖ полувисит: там это приходится делать многократно.

Date: 2014-12-16 04:04 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Ну если считать, что из вон того тестового URL’а нужно получить http://philtrius.livejournal.com/867320.html и по нему перейти, то как-то примерно вот так:

// ==UserScript==
// @name        LJ Follow redirect
// @namespace   http://yurikhan.dreamwidth.org/
// @include     http://www.livejournal.com/misc/get_domain_session.bml?*
// @version     1
// @grant       GM_registerMenuCommand
// ==/UserScript==

GM_registerMenuCommand('Follow', 
  function() {
    window.location.search
    .replace(/^\?/, '')
    .split('&')
    .map(function(arg) { return arg.split('='); })
    .filter(function(pair) { return pair[0] === 'return'; })
    .forEach(function(pair) { window.location.assign(decodeURIComponent(pair[1]));
  });
}, 'F');

Обработка ошибок, более чёткое следование RFC и улучшение UI оставляется читателю в качестве упражнения. (Как есть оно просто добавляет в контекстное меню Greasemonkey пункт, который надо кликать руками.)

Edited Date: 2014-12-16 04:08 pm (UTC)

Date: 2014-12-16 06:49 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Спасибо. Буду вкуривать.

Date: 2014-12-16 08:34 pm (UTC)
ext_613079: Default userpic (Бритый небритый)
From: [identity profile] shaplov.livejournal.com
О! Слушай, а вот мне бы скриптик который бы syle=mine ко всем жижовым урлам добавлял бы!

Может подскажешь с какого места начать его ваять??

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

Date: 2014-12-17 03:55 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

А этот у меня уже готовый есть.

Гризманковские скрипты начинают ваять с постановки проблемы:

который бы syle=mine ко всем жижовым урлам добавлял бы!

Формализуем: «Для всех ссылок (<a>), где адрес ссылки (href) содержит livejournal.com, добавить параметр style=mine.» (Я тут немного упрощаю — на самом деле следовало бы искать подстроку не во всём url’е, а только в хосте.) Учитываем, что параметры уже могут быть, а могут и не быть.

// ==UserScript==
// @name        Add style=mine to LiveJournal links
// @namespace   http://yurikhan.dreamwidth.org/
// @include     *
// @version     1
// @grant       none
// ==/UserScript==

Array.prototype.forEach.call(
  document.querySelectorAll('a[href*="livejournal.com"]'),
  function(anchor) {
    anchor.search = (anchor.search ? anchor.search + '&' : '?') + 'style=mine';
  });

Date: 2014-12-17 09:16 am (UTC)
ext_613079: Default userpic (Бритый небритый)
From: [identity profile] shaplov.livejournal.com
Гризманковские скрипты начинают ваять с постановки проблемы:
Для меня эта постановка проблемы неверная. Потому что заметная часть ссылок без style=mine приходят ко мне из почты, которую я смотрю внебраузерным почтовым клиентом. Поэтому для меня оно должно звучать в виде

"Если в строке браузера присутствует *.livejournal.com и отсутствует параметр style=mine"

Date: 2014-12-17 03:46 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Это хорошее уточнение.

Тогда ограничиваем применимость скрипта всеми страницами *.livejournal.com/*. Дальше у нас есть три случая. Либо window.location.search пусто, тогда заменяем его на ?style=mine. Либо оно непусто, тогда отрываем ведущий ?, разбиваем по '&' и проверяем наличие 'style=mine'. Если нет такого элемента — добавляем к window.location суффикс &style=mine. А если есть, то ничего не делаем.

// ==UserScript==
// @name        View LJ as style=mine
// @namespace   http://yurikhan.dreamwidth.org/
// @include     *.livejournal.com/
// @include     *.livejournal.com/*/
// @include     *.livejournal.com/*.html
// @version     1
// @grant       none
// ==/UserScript==

if (window.location.search === '') {
  window.location.search = '?style=mine';
} else if (
    window.location.search
    .replace(/^\?/, '')
    .split('&')
    .indexOf('style=mine') === -1) {
  window.location += '&style=mine';
}

(Не проверял, писал в браузере — может потребоваться отладка.)

Upd: конечно, перепутал знак проверки во втором кейсе.

И ещё, похоже, нельзя лепить style=mine во все страницы. Например, обработчик редактирования комментов с этим параметром себя неадекватно ведёт. Поэтому пишем @include, покрывающие всё нужное и не трогающие *.bml, на всякий случай.

Edited Date: 2014-12-17 05:10 pm (UTC)

Date: 2014-12-17 11:07 pm (UTC)
lodin: A bearded hacker in a hat (Default)
From: [personal profile] lodin
У, вот это интересный вариант!

Date: 2014-12-17 11:05 pm (UTC)
lodin: A bearded hacker in a hat (Default)
From: [personal profile] lodin
Firefox, addon называется redirector. Конфиг вот (его можно import).

{
    "createdBy": "Redirector v2.7.1",
    "createdAt": "2014-12-17T23:04:12.548Z",
    "redirects": [
        {
            "exampleUrl": "http://stripline.livejournal.com/",
            "includePattern": "^http://(.*\\.livejournal\\.com/[^?#]*)(#.*|)$",
            "excludePattern": "\\.bml|/manage/|pics.livejournal.com",
            "redirectUrl": "http://$1?style=mine$2",
            "patternType": "R",
            "unescapeMatches": false,
            "escapeMatches": false,
            "disabled": false
        }
    ]
}

Date: 2015-07-11 07:30 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Наконец-то руки дошли. Не работает :-(

Как это дело отлаживать?

Upd: Потребовалось заменить строчку на
// @include *.livejournal.com/misc/get_domain_session.bml?*
Edited Date: 2015-07-11 07:54 pm (UTC)

Date: 2015-07-11 08:21 pm (UTC)
yurikhan: (default)
From: [personal profile] yurikhan

Так сейчас работает?

Про то, что хост может быть любой в домене livejournal.com, в постановке ничего не было.

Отлаживаются гризманки-скрипты как обычный javascript — через console.log(…).

Date: 2015-07-11 08:24 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Ну, как-то работает. Разбираться явно ещё надо.

Спасибо!

Date: 2015-07-11 07:54 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Наконец-то руки дошли. Не работает :-(

Как это дело отлаживать?

Date: 2016-10-31 10:06 pm (UTC)
From: [identity profile] de-monk.livejournal.com
Огромное спасибо )

Date: 2014-12-16 06:48 pm (UTC)
ext_605364: geg MOPO4 (geg_MOPO4)
From: [identity profile] gegmopo4.livejournal.com
Очень актуально. Но всё ленюсь написать скрипт, который делает это с содержимым буфера обмена.

Profile

beldmit: (Default)
Dmitry Belyavskiy

May 2025

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 20th, 2025 04:51 pm
Powered by Dreamwidth Studios