Базовая аутентификация HTTP с объектами HTTPService в Adobe Flex/AIR

Как насчет:

library(tidyverse)

df %>%
filter( (Name == "Emily" & Gender == "Female") | (Name == "Michael" & Gender == "Male") )

Использованные данные:

df <- read_csv("Name,Year,Gender,Count
         Emily,2000,Female,25952
         Emily,2001,Female,34294
         Michael,2000,Male,345697
         Michael,2000,Female,4
         Michael,2001,Male,185029
         Michael,2001,Female,5")
31
задан CharlesB 17 July 2012 в 05:21
поделиться

6 ответов

Наконец полученный некоторое внимание от Adobe и получил ответ на этом. Проблема с длинными заголовками Аутентификации HTTP состоит в том, что по умолчанию класс Base64Encoder введет символы новой строки каждые 72 символа. Очевидно, это заставляет блок основы 64 закодированных строки интерпретироваться как новый атрибут заголовка, который вызывает ошибку.

можно зафиксировать это путем установки (в вышеупомянутом примере) encoder.insertNewLines = ложь; настройка по умолчанию верна.

я исправил вышеупомянутый код для работы на произвольно длинные строки Аутентификации.

13
ответ дан 27 November 2019 в 22:48
поделиться

setCredentials () & setRemoteCredentials () методы предназначаются для использования с Услугами передачи данных Flex/LiveCycle, таким образом, они, вероятно, не применяются в Вашем случае.

Это должно работать на Вас. Я смог воспроизвести это поведение на своем сервере, и эта фиксация, кажется, добилась цели; это все еще кажется немного нечетным, это не более удобно для пользователя API, рассматривая, как распространенный вариант использования Вы думали бы, что это было, но тем не менее, я протестировал и проверил, что это работает, учитывая действительный сертификат SSL:

private function authAndSend(service:HTTPService):void
{
        var encoder:Base64Encoder = new Base64Encoder();
        encoder.encode("someusername:somepassword");

        service.headers = {Authorization:"Basic " + encoder.toString()};                            
        service.send();
}

Hope это помогает! И благодарит отправить - я уверен, что столкнулся бы с этим рано или поздно сам. ;)

1
ответ дан 27 November 2019 в 22:48
поделиться

Кроме того, именно так другие люди не проводят 10 минут, работая, почему корректный пример не вполне работает как есть, необходимо импортировать mx.utils. Пакет Base64Encoder, например:

        import mx.utils.Base64Encoder;

Вначале или где-нибудь в области CDATA. Я являюсь новым для сгибания так, это не было довольно очевидно сначала.

0
ответ дан 27 November 2019 в 22:48
поделиться

Попытайтесь использовать setCredentials, а не setRemoteCredentials и привести это к сбою, с помощью Fiddler/Charles для обнаружения то, какие заголовки отправляются с запросом.

0
ответ дан 27 November 2019 в 22:48
поделиться

Ач. Боль, страдание. Полное несчастье.

Хотя вы придумали, как добавить заголовок перед тем, как позвонить, неприятная правда заключается в том, что где-то глубоко в пространстве интеграции Flash / браузера ваши заголовки снова удаляются.

Из моего сообщения в блоге в прошлом году на verveguy.blogspot.com

Итак, я разгадал Истину. (Я думаю) Это мучительнее, чем можно было бы представить

1 / Все запросы HTTP GET лишены заголовков. Его нет в стеке Flex, поэтому, вероятно, это базовая среда выполнения Flash-плеера

2 / Все HTTP-запросы GET с типом содержимого, отличным от application / x-www-form-urlencoded , превращаются в запросы POST

3 / Все HTTP-запросы POST, не содержащие фактических опубликованных данных, преобразуются в GET-запросы. См. 1 / и 2 /

4 / Все запросы HTTP PUT и HTTP DELETE превращаются в запросы POST. Похоже, это ограничение браузера, с которым застрял Flash-плеер. (?)

Практически все это сводится к тому, что если вы хотите передавать заголовки во всех запросах, вы всегда должны использовать POST и должны найти другой способ передать семантику операции, которую вы «действительно хотели». Сообщество Rails решило передать ? _ Method = PUT / DELETE как решение проблем браузера, лежащих в основе 4 /

Поскольку Flash добавляет замечательную проблему удаления заголовков при GET, я также использую ? _ Method = GET как обходной путь. Однако, поскольку это срабатывает на 3 /, Я передаю фиктивный объект в качестве закодированных данных POST. Это означает, что моя служба должна игнорировать фиктивные опубликованные данные в запросе ? _ Method = GET .

На данный момент важно знать о 2 /. Это напрасно потратило кучу моего времени.

Я встроил всю эту обработку в новый класс RESTService с поддержкой разметки MXML, так что можно притвориться, что этого не существует на стороне клиента.

Надеюсь, это кому-то поможет. .

9
ответ дан 27 November 2019 в 22:48
поделиться

Это действительно помогло мне! Спасибо! Я использую Flex Builder 3

Одно замечание: заголовки свойств WebService доступны только для чтения. Поэтому я попытался использовать httpHeaders. Это работает!

    var encoder:Base64Encoder = new Base64Encoder();
    encoder.insertNewLines = false;
    encoder.encode("test:test");

    sfWS.httpHeaders = {Authorization:"Basic " + encoder.toString()};   
1
ответ дан 27 November 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: