IdHTTP:EIdException ResponseCode(着色 + 替换)
IdHTTP: EIdException ResponseCode (Colorize + Replace)
我这里有两个问题。所以我需要你的帮助。
microsoft.com的响应码结果是一段时间HTTP/1.1 403 Forbidden or HTTP/1.1 200 OK.`
try
{
IdHTTP->Get("http://www.microsoft.com");
ListBox->Items->Add(IdHTTP->Response->ResponseCode);
}
catch (const EIdException &E)
{
ListBox->Items->Add(E.Message);
ListBox->Items->Add(IdHTTP->Response->ResponseText);
}
但是当我在 http://web-sniffer.net/
或 http://tools.seobook.com/server-header-checker
上检查时,结果是 HTTP/1.1 302 Moved Temporarily
。
为什么 IdHTTP 的结果与上面两个 url 不同? IdHTTP如何实现相同的http状态码?。
着色并替换 E.Message 错误的 EIdException / TListBox 中的异常。
例如,我想将 "Socket Error # 10061Connection refused"
替换为 "your connection is refused".
ListBox->Items->Add(StringReplace(E.Message,"Socket Error # 10061Connection refused.","your connection is refused.",TReplaceFlags()<<rfReplaceAll));
但是用那种方式,结果还是一样
感谢您抽出宝贵时间阅读本文。任何帮助或建议将不胜感激!!
在网站维护之外,我怀疑 http://www.microsoft.com
在正常情况下 return 会出现 403 Forbidden
错误。但是,就像任何网站一样,我想它 可能 有时会发生。这是一个致命错误,您当时无法访问 URL(如果有的话)。
302 Moved Temporarily
是 HTTP 重定向。 TIdHTTP.OnRedirect
事件将被触发,为您提供新的 URL。如果 TIdHTTP.HandleRedirects
属性 为真,或者 OnRedirect
事件处理程序 return 为真,TIdHTTP
将在内部处理重定向并自动请求新的 URL 给你。 TIdHTTP.Get()
直到最后的 URL 才会退出,否则会发生错误。
至于错误处理,如果您想根据发生的错误类型自定义显示的消息,您需要实际区分可能发生的各种错误类型,例如:
try
{
IdHTTP->Get("http://www.microsoft.com");
ListBox->Items->Add(IdHTTP->Response->ResponseCode);
}
catch (const EIdHTTPProtocolException &E)
{
// HTTP error
// E.ErrorCode contains the ResponseCode
// E.Message contains the ResponseText
// E.ErrorMessage contains the content of the error body, if any
ListBox->Items->Add(E.Message);
}
catch (const EIdSocketError &E)
{
// Socket error
// E.LastError contains the socket error code
// E.Message contains the socket error message
if (E.LastError == Id_WSAECONNREFUSED)
ListBox->Items->Add("Your connection is refused");
else
ListBox->Items->Add(E.Message);
}
catch (const EIdException &E)
{
// any other Indy error
ListBox->Items->Add(E.Message);
}
catch (const Exception &E)
{
// any other non-Indy error
ListBox->Items->Add(E.Message);
}
我这里有两个问题。所以我需要你的帮助。
microsoft.com的响应码结果是一段时间HTTP/1.1 403 Forbidden or HTTP/1.1 200 OK.`
try { IdHTTP->Get("http://www.microsoft.com"); ListBox->Items->Add(IdHTTP->Response->ResponseCode); } catch (const EIdException &E) { ListBox->Items->Add(E.Message); ListBox->Items->Add(IdHTTP->Response->ResponseText); }
但是当我在
http://web-sniffer.net/
或http://tools.seobook.com/server-header-checker
上检查时,结果是HTTP/1.1 302 Moved Temporarily
。为什么 IdHTTP 的结果与上面两个 url 不同? IdHTTP如何实现相同的http状态码?。
着色并替换 E.Message 错误的 EIdException / TListBox 中的异常。
例如,我想将
"Socket Error # 10061Connection refused"
替换为"your connection is refused".
ListBox->Items->Add(StringReplace(E.Message,"Socket Error # 10061Connection refused.","your connection is refused.",TReplaceFlags()<<rfReplaceAll));
但是用那种方式,结果还是一样
感谢您抽出宝贵时间阅读本文。任何帮助或建议将不胜感激!!
在网站维护之外,我怀疑 http://www.microsoft.com
在正常情况下 return 会出现 403 Forbidden
错误。但是,就像任何网站一样,我想它 可能 有时会发生。这是一个致命错误,您当时无法访问 URL(如果有的话)。
302 Moved Temporarily
是 HTTP 重定向。 TIdHTTP.OnRedirect
事件将被触发,为您提供新的 URL。如果 TIdHTTP.HandleRedirects
属性 为真,或者 OnRedirect
事件处理程序 return 为真,TIdHTTP
将在内部处理重定向并自动请求新的 URL 给你。 TIdHTTP.Get()
直到最后的 URL 才会退出,否则会发生错误。
至于错误处理,如果您想根据发生的错误类型自定义显示的消息,您需要实际区分可能发生的各种错误类型,例如:
try
{
IdHTTP->Get("http://www.microsoft.com");
ListBox->Items->Add(IdHTTP->Response->ResponseCode);
}
catch (const EIdHTTPProtocolException &E)
{
// HTTP error
// E.ErrorCode contains the ResponseCode
// E.Message contains the ResponseText
// E.ErrorMessage contains the content of the error body, if any
ListBox->Items->Add(E.Message);
}
catch (const EIdSocketError &E)
{
// Socket error
// E.LastError contains the socket error code
// E.Message contains the socket error message
if (E.LastError == Id_WSAECONNREFUSED)
ListBox->Items->Add("Your connection is refused");
else
ListBox->Items->Add(E.Message);
}
catch (const EIdException &E)
{
// any other Indy error
ListBox->Items->Add(E.Message);
}
catch (const Exception &E)
{
// any other non-Indy error
ListBox->Items->Add(E.Message);
}