Это ожидаемое поведение, если вы используете HTTP-прокси.Ненулевое значение aStatus
означает «не получен ответ из-за какой-либо ошибки».С другой стороны, нулевое значение aStatus
означает «был какой-то ответ, проверьте nsIHttpChannel.responseStatus
, чтобы увидеть, был ли запрос успешным».Вот что вы получите, если сервер ответит, например, «404 Not Found» - aStatus
будет равно нулю (вы получили ответ), но nsIHttpChannel.responseStatus
будет равно 404.
То же самое с HTTPпрокси, потому что прокси всегда будет отправлять ответ, вероятно, «502 Bad Gateway», если он не может подключиться к серверу.Вот что получает браузер, так что aStatus
будет равно нулю, а nsIHttpChannel.responseStatus
будет равно 502. Так что в своем коде вы должны сделать что-то вроде этого:
OnStateChange(
nsIWebProgress *aWebProgress,
nsIRequest *aRequest,
PRUint32 aStateFlags,
nsresult aStatus)
{
if (FAILED(aStatus))
{
// Got no response
}
else
{
nsCOMPtr<nsIHttpChannel> channel = do_QueryInterface(aRequest);
PRUint32 status = 0;
if (channel)
channel->GetResponseStatus(&status);
if (status >= 400)
{
// Got an HTTP error
}
else
{
// Success!
}
}
}