vla*_*don 2 qt network-programming qt5
使用Qt5,如何简单检查给定的URL是否可用?
没有使用信号槽的特殊功能,但只是使用类似的东西bool isUrlAvailable(QString url),有这样的功能吗?
更新 QUrl.isValid()是错误的答案,它只是检查url是否正确形成.
更新2 QUrl.host()也是错误的答案,它只是返回给定网址的主机部分,它不检查其可用性.
更新3 ping主机也不正确,因为url可能可用,但不接受icmp echo(= ping)
是的,您可以对给定的URL执行HEAD请求.
bool urlExists (QString url_string) {
QUrl url(url_string);
QTcpSocket socket;
socket.connectToHost(url.host(), 80);
if (socket.waitForConnected()) {
socket.write("HEAD " + url.path().toUtf8() + " HTTP/1.1\r\n"
"Host: " + url.host().toUtf8() + "\r\n\r\n");
if (socket.waitForReadyRead()) {
QByteArray bytes = socket.readAll();
if (bytes.contains("200 OK")) {
return true;
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这只是一个示例200 OK,您可能还想检查状态代码是否是2XX或3XX(重定向)类中的其他代码.
| 归档时间: |
|
| 查看次数: |
1793 次 |
| 最近记录: |