Michael Lin (carmelist) wrote,
Michael Lin
carmelist

Чиним ljArchive

Оригинал взят у sharpc в Чиним ljArchive
С некоторых пор самая удобная (хотя, увы, давно не поддерживающаяся) программа для оффлайн-копии ЖЖ ljArchive (что это такое и как этим пользоваться можно прочитать, например, тут) стала выдавать ошибки при синхронизации комментариев (по таймауту) вида:

The server is not responding. Please try again later.
EF.ljArchive.Engine.ExpectedSyncException: An expected exception occurred: ServerNotResponding ---> System.Net.WebException: The underlying connection was closed: The connection was closed unexpectedly.
и дальше коллстек из EF.ljArchive.Engine.Sync.ExportCommentsMeta в System.Xml.


Ошибка происходила из-за того, что в этой функции XmlTextReader пытался читать из WebResponse.GetResponseStream(), который возвращал не XML, как ожидалось, а главную HTML-страницу. Дальнейшее исследование показало, что для скачивания комментариев ЖЖ не устраивает авторизация, которую производит ljArchive, например, для скачивания записей. При сравнении HTTP-запросов Semagic (в последней версии которого скачивание комментариев работает) и ljArchive выяснилось, что их куки ljloggedin отличаются: у Semagic они имеют вид u9812774:s1373, а у ljArchive u9812774:s1371:11 BASE64-подобных символов, взятых из куков ljsession. Остальное было делом техники: надо в файле Engine/Util.cs:72 (функция HttpWebRequestFactory::Create) заменить строку
wr.CookieContainer.Add(new Cookie("ljloggedin", ljsession.Substring(ljsession.IndexOf(":") + 1, ljsession.LastIndexOf(":") - ljsession.IndexOf(":") - 1), "/", uri.Host));
например, на
wr.CookieContainer.Add(new Cookie("ljloggedin", ljsession.Substring(ljsession.IndexOf(":") + 1, ljsession.LastIndexOf(":", ljsession.LastIndexOf(":") - 1) - ljsession.IndexOf(":") - 1), "/", uri.Host));
и скачивание комментариев магическим образом заработало. Авось еще какое-то время не отвалится.


Для тех, кто не хочет компилировать, я положил пропатченную версию EF.ljArchive.Engine.dll на Народ. К сожалению, компиляторы разные, поэтому бинарный дифф большой, в идеале же достаточно было бы исправить всего 18 байт.

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 9 comments