Firefox:代理环境中 OnStateChange 状态出现问题
我正在尝试使用状态来查看 Mac 上的观察者类中的 C++ XPCOM 组件是否存在错误。
OnStateChange(
nsIWebProgress *aWebProgress,
nsIRequest *aRequest,
PRUint32 aStateFlags,
nsresult aStatus)
{
}
在代理环境中,尽管浏览器无法加载页面,aStatus
参数始终为 true。
在非代理环境中,它会在状态中给出正确的值(错误)。
如果您尝试访问 http://10.1.3.3/ (一些随机 IP),您可以看到它。如果使用代理,状态为零(成功),如果没有代理,您会得到一个错误值。
是否应该设置一些参数以获得正确的误差值?
I am trying to use the status to see if there is an error in C++ XPCOM component in my observer class on Mac.
OnStateChange(
nsIWebProgress *aWebProgress,
nsIRequest *aRequest,
PRUint32 aStateFlags,
nsresult aStatus)
{
}
In proxy environment the aStatus
parameter is always true though the browser fails to load the page.
In non-proxy environments it gives the proper value (error) in status.
You can see it if you try accessing http://10.1.3.3/ (some random IP). With a proxy the status is zero (success) and without a proxy you get an error value.
Should some parameters be set to get the proper error value?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用 HTTP 代理,这是预期的行为。非零
aStatus
表示“由于某些错误而没有得到任何响应”。另一方面,零aStatus
值意味着“有一些响应,检查nsIHttpChannel.responseStatus
以查看请求是否成功”。例如,如果服务器响应“404 Not Found”,您会得到这样的结果 -aStatus
将为零(您收到了响应),但nsIHttpChannel.responseStatus
将是 404。这与 HTTP 代理相同,因为代理总是会发回响应,如果无法连接到服务器,可能会返回“502 Bad Gateway”。这就是浏览器得到的结果,因此
aStatus
将为零,而nsIHttpChannel.responseStatus
将是 502。因此,在您的代码中,您应该执行以下操作:This is the expected behavior if you use an HTTP proxy. A non-zero
aStatus
means "didn't get any response because of some error". On the other hand, a zeroaStatus
value means "there was some response, checknsIHttpChannel.responseStatus
to see whether the request was successful". That's what you get if the server responds with "404 Not Found" for example -aStatus
will be zero (you got a response back) butnsIHttpChannel.responseStatus
will be 404.It's the same with an HTTP proxy because the proxy will always send a response back, probably "502 Bad Gateway" if it couldn't connect to the server. That's what the browser gets so
aStatus
will be zero andnsIHttpChannel.responseStatus
will be 502. So in you code you should do something like this: