HTTPS-запрос возвращает 2032 Stream Error только для Android с Flex 4.6 Mobile - PullRequest
4 голосов
/ 02 апреля 2012

У меня есть мобильное приложение для iOS и Android.Он делает запрос входа в систему через HTTPS (используя POST с HTTPService). Все отлично работает при отладке на моем устройстве разработки через ADL и при компиляции и тестировании на iOS 4.2 и iOS 5.

Устройства Android также работаютправильно при выполнении запросов HTTPS к другим доменам, таким как Twitter и т. д. из моего тестового приложения или из браузера устройства.

У меня есть только несколько тестовых устройств Android, и они работают под управлением 2.3.3, но ни одногосделает успешное соединение.Во время отладки по USB я вижу, что вызов HTTPService возвращает FaultEvent с IOErrorEvent # 2032.

После исследования я обнаружил, что у ОС Android есть некоторые проблемы с определенными сертификатами SSL, и эмитентом, который используется на сервере, является «VeriSign Class 3 International Server CA - G3», но я действительно не нашел ни одногожизнеспособные обходные пути / решения.кто-нибудь еще сталкивался с этим?Я знаю, что это довольно специфично.

Просто хотел добавить, что код состояния HTTP 0 возвращается сразу перед отправкой ioErrorEvent 2032.Я проверил документы Adobe API для HTTPStatusEvent, и 0, кажется, по умолчанию.http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/HTTPStatusEvent.html

HTTPStatusEvent objects are always sent before error or completion events. An HTTPStatusEvent object does not necessarily indicate an error condition; it simply reflects the HTTP status code (if any) that is provided by the networking stack. Some Flash Player environments may be unable to detect HTTP status codes; a status code of 0 is always reported in these cases. Just wanted to add additional findings...through testing we were able to use that same certificate on another server - and despite security warnings, I was able to get data on my test Android device. This makes me think that the issue may be related to the server....It's hosted by Rackspace so we're going to reach out to them to attempt more troubleshooting.

Ответы [ 4 ]

1 голос
/ 14 августа 2012

У меня была та же проблема, Stream error 2032 на https: requests, и я смог ее решить, обновив среду выполнения AIR. Я заметил ошибку, возникающую на одном тестовом устройстве, а не на другом, главное отличие в том, что на одном с ошибкой установлено AIR 3.1, на другом без ошибок AIR 3.2.

Сейчас мы упаковываем приложение в автономную среду выполнения AIR (версия 3.3 ). Поскольку FlashBuilder поставляется с предустановленной AIR 3.1, необходимо было загрузить новый AIR SDK и наложить его на FlashBuilder.

0 голосов
/ 18 мая 2017

Я только что столкнулся с этой проблемой на Android при использовании AIR 25.0.0.134. У IOS и Desktop не было проблем с использованием одного и того же кода.

Я обнаружил, что проблема заключалась в том, что используемый мной URL имел дополнительные (невидимые) символы. т.е.% A0

Решением было избежать URL и удалить все экземпляры% A0, затем удалить и продолжить загрузку файла.

var url:String = String(escape(ev.target.data)).replace(/%0A/gi, ""); 
downloadThisFile(unescape(url));
0 голосов
/ 22 мая 2012

Очень странно. Закончилось необходимость настройки прокси, чтобы все заработало.

0 голосов
/ 03 апреля 2012

Различные средства просмотра виртуальной флэш-памяти разрешают подобные ошибки по-разному в зависимости от платформы.Лучше всего применить несколько обработчиков ошибок и посмотреть, к чему это приведет.

Я собираюсь процитировать целое «решение» из этого продолжительного результата поиска Google: http://www.judahfrangipane.com/blog/2007/02/15/error-2032-stream-error/

Попробуйте прослушать HTTP_STATUS Event , затем добавьтеобработчики событий для всех типов ошибок, чтобы получить более детальный уровень ответа.

Пример:

public function doRequest(url:String = "http://www.example.com/page.php?something=whatYouWant"):void {
   var fileRequest:URLRequest = new URLRequest(url);
   var myLoader:URLLoader = new URLLoader();

   myLoader.addEventListener(Event.COMPLETE, onLoaderReady);

   myLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, function(evt:Object):void{handleError(evt,"HTTPStatusEvent.HTTP_STATUS");});
   myLoader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:Object):void{handleError(evt,"IOErrorEvent.IO_ERROR");});
   myLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(evt:Object):void{handleError(evt,"SecurityErrorEvent.SECURITY_ERROR");});
   myLoader.load(fileRequest);
}
private function handleError(evt:Object , listenerType = "Anonymus"):void{
   trace('handleError listenerType '+listenerType+'\nError: '+evt);
}

Поскольку это, в частности, Android, убедитесь, что вы добавили правильные "разрешения" дляиспользовать Интернет, обнаруживать соединения и т. д. в файле манифеста:

<android>
    <manifestAdditions><![CDATA[
    <manifest>
        <!-- See the Adobe AIR documentation for more information about setting Google Android permissions -->
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    </manifest>
]]></manifestAdditions>
  </android>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...