Рабочее

Наконец-то столкнулся с более-менее интересным случаем, чтобы опубликовать. Случай отнюдь не из ряда вон, но мне немного попортил нервов.

Я не помню, рассказывал ли я тут о моём отношении к своим работам. Поэтому позволю себе высказаться. Я не занимаюсь чем-то художественно интересным, как например, камрад '[info]'__mixa__, который имеет возможность фотографировать самолётики и тому подобное. Я работаю в сфере услуг, причём глубоко айтинизированной её части. Айтинизированной — от IT. Там нужны программисты в довольно массовом порядке, и одним из таких программистов я и являюсь. Мне нравиться, что я делаю, но мне отнюдь не интересно расписывать все перипетии своего рабочего места. Поэтому информацию об этом в публичных каналах я свожу к минимуму. В личной переписке могу немного пораспространятся, если тема зайдет об этом.

Итак, был написан новый шлюз — на питоне. Не то, чтобы совсем каркас, но и не законченный шлюз. Протокол работал, но нужно было реализовать дополнительные опции, так как разные клиенты имеют разные заморочки. В общении использовалось обычный POST-запрос.

И вот попались мне одни ребята — очень крупный клиент, по этой причине послать их просто нафиг не мог. Иногда бывало ребята на той стороне тупили по жёсткой, вплоть до того, что приходилось поднимать менеджеров и вставлять им люлей через их директора. Но тут ребята серьёзные, крупные — по идее у них всё должно быть круто. Поэтому я, на всякий случай, всё проверял. В итоге, ошибка оказалась и на моей стороне, но настройка их сервера — отвал башки

Проблема с ними была в том, что из POST-запроса не читался самый главный параметр — ID запроса. Сначала мне высказали причину, что в начале параметра пробелы. Проверка на Apache и самодельном твистедовом сервере показала, что все параметры приходят корректно и без пробелов. Заверив их, что у меня при тестах всё корректно — я получил новое предположение: что это просто в логах так отображается, а на самом деле это не пробелы, а перенос строки. «О-о-к», — подумал я. Откуда взяться переносу строки? Немного подумав, я решил не парсить POST-запрос от шлюза PHP-шечкой в Apache или средствами твистеда, а просто сдампить то, как он приходит в сыром виде.

И я нашел проблему! Последним заголовком всегда шел Authorization. А Authorization у нас какой? Правильно — Basic. Basic Authorization — это просто пара «логин:пароль», закодированная в base64. В питоне достаточно воспользоваться стандартным методом encode у строки для такого преобразования. Но! В отличии от встроенного же модуля — этот метод всегда добавляет LF в конце. С одной стороны, это корректно, в base64 LF может быть хоть через каждый символ — функция декода должна их всех отбросить и декодировать только «текст». Но с другой стороны, в HTTP-заголовках такого всё-таки быть не должно. И я бы понял, если бы их сервер дал мне отлуп с неправильным логином/паролем. Но! Эти ребята умудрились этот LF перенести из заголовков в тело POST-запроса! То есть через два разделителя, а по факту — четыре символа (CRLF отделяющий один заголовок от другого, плюс CRLF отделяющий заголовок от тела)!

КАК?! FUKKEN MAGIC! Ну итог прост: баг поправлен, все счастливы. Но мне всё-таки интересно: как так шизоидально нужно настроить сервер? =)

Похожие статьи

  • Рабочее (немного о чернокнижии, повседневном, нудное, талисманчики)
  • Рабочее
  • Рабочее
  • Рабочее
  • Как мне подыскать высокооплачиваемое рабочее место?
  • Март 19, 2011 | Категория: Без рубрики

    Добавить комментарий

    close window

    Service Times & Directions

    Weekend Masses in English

    Saturday Morning: 8:00 am

    Saturday Vigil: 4:30 pm

    Sunday: 7:30 am, 9:00 am, 10:45 am,
    12:30 pm, 5:30 pm

    Weekend Masses In Español

    Saturday Vigil: 6:15pm

    Sunday: 9:00am, 7:15pm

    Weekday Morning Masses

    Monday, Tuesday, Thursday & Friday: 8:30 am

    map
    6654 Main Street
    Wonderland, AK 45202
    (513) 555-7856