Incapaz de obter o código de resposta HTTP/cabeçalhos no ActionScript 3?
-
21-09-2019 - |
Pergunta
Estou usando o urllloader para postar em um servidor. A resposta XML do servidor pode responder com um erro 404 ou 403 (proibido). No entanto, não consigo obter os códigos de resposta.
Aqui está o código
var urlString:String = "some url";
var urlRequest:URLRequest = new URLRequest(urlString);
var loader:URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, setXMLData );
loader.addEventListener( IOErrorEvent.IO_ERROR, ioHandler );
loader.addEventListener( HTTPStatusEvent.HTTP_STATUS, httpStatusHandler );
//...
public function httpStatusHandler(evt:HTTPStatusEvent):void {
trace("status is " + evt.status);
}
O status é sempre 0, independentemente de eu voltar 200, 400, 404, 301, 500, etc ...
Alguma ideia?
Solução
Apenas para o ar, você pode usar o httpronsestatus. Caso contrário, no flash/flex sem ar, você não pode.
Evento HttproSestatus
Tipo de objeto de evento: flash.events.httpstatusevent httpstatusevent.type Property = flash.events.httpstatusevent.http_restonse_status
Versão do idioma: ActionScript 3.0 Versões de tempo de execução: AIR 1.0 AIR 1.0
Despachado se uma chamada para o método load () tentar acessar dados sobre HTTP, e a Adobe Air puder detectar e retornar o código de status da solicitação. Ao contrário do evento Httpstatus, o evento HTTPRESPONSESTATUS é entregue antes de qualquer dados de resposta. Além disso, o evento HTTPRESPONSESTATUS inclui valores para as propriedades ResponseHeaders e Responseurl (que são indefinidas para um evento httpstatus. Observe que o evento HTTPRESPONSESTATUS (se houver) será enviado antes (e além de) qualquer evento completo ou de erro.
Outras dicas
A capacidade de olhar para os cabeçalhos é limitada em vários navegadores; portanto, o Flash tem um problema em passar as informações. Isso é atribuído principalmente às configurações do navegador, mas ainda não encontrei uma onde ele realmente funcione. saída de eventos de status.
Desisti e fiz o arquivo imprimir o código de resposta em meus projetos, não maravilhosos (e derrotar um pouco), mas parece funcionar.
Como uma resposta tardia (FWIW):
Pelo que li, os códigos de status que você recebe depende do navegador em que o Flash Player está sendo executado.
Um artigo Diz que você só pode obter 200 ou 500. Uma pergunta Diz que eles estavam recebendo 207 em Chrome, mas 0 no Firefox.
Pessoalmente, eu testei usando o Dev Flash player, bem como uma versão ActiveX e consegui obter muitos códigos de status HTTP 2xx/4xx diferentes (mas não consegui obter os códigos de redirecionamento 3xx que tentei porque os pedidos foram redirecionados e retornados 200s ).