https支持域名校验代码示例
时间: 2023-02-23 08:21:16 浏览: 85
下面是一个用 Python 编写的 https 域名校验的示例代码:
```
import ssl
import socket
hostname = "www.example.com"
cert = ssl.get_server_certificate((hostname, 443))
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
common_name = x509.get_subject().CN
if hostname != common_name:
raise Exception("Hostname does not match certificate")
```
这段代码通过获取服务器证书,并使用 OpenSSL 库解析证书,最后比较证书中的通用名(Common Name)和给定的主机名是否匹配。如果不匹配,则抛出一个异常。
相关问题
正则校验url格式 代码
以下是使用正则表达式校验URL格式的示例代码:
```python
import re
def is_valid_url(url: str) -> bool:
regex = re.compile(
r'^https?://' # http:// 或 https:// 开头
r'(?:(?:[A-Z0-9_](?:[A-Z0-9_-]{0,61}[A-Z0-9_])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # 域名部分
r'localhost|' # 或者是本地地址
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # 或者是IP地址
r'(?::\d+)?' # 端口号(可选)
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
return bool(regex.match(url))
# 测试示例
print(is_valid_url('http://www.example.com')) # True
print(is_valid_url('https://example.com/path/to/page.html')) # True
print(is_valid_url('ftp://example.com/path/to/file.txt')) # False
print(is_valid_url('http://localhost:8080')) # True
print(is_valid_url('http://127.0.0.1')) # True
```
该函数使用了一个较为复杂的正则表达式,可以较为准确地校验URL的格式。其中,该正则表达式包含以下几个部分:
1. `^https?://`:以 `http://` 或 `https://` 开头。
2. `(?:...|...)`:表示两个或多个可选的匹配项。
3. `[A-Z0-9_](?:[A-Z0-9_-]{0,61}[A-Z0-9_])?\.`:匹配域名中的一级和多级子域名,例如 `www.`、`blog.` 等。
4. `(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)`:匹配顶级域名,例如 `.com`、`.co.uk` 等。
5. `localhost`:匹配本地地址。
6. `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`:匹配IP地址。
7. `(?::\d+)?`:匹配可选的端口号。
8. `(?:/?|[/?]\S+)$`:匹配可选的路径和查询参数。
如果URL符合以上规则,则返回 `True`,否则返回 `False`。
kotlin 正则校验url格式 代码
以下是使用正则表达式校验URL格式的Kotlin示例代码:
```kotlin
fun isValidUrl(url: String): Boolean {
val regex = Regex(
"""^https?:// # http:// 或 https:// 开头
(?:(?:[A-Z0-9_](?:[A-Z0-9_-]{0,61}[A-Z0-9_])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)| # 域名部分
localhost| # 或者是本地地址
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) # 或者是IP地址
(?::\d+)? # 端口号(可选)
(?:/?|[/?]\S+)$""", RegexOption.IGNORE_CASE or RegexOption.COMMENTS
)
return regex.matches(url)
}
// 测试示例
println(isValidUrl("http://www.example.com")) // true
println(isValidUrl("https://example.com/path/to/page.html")) // true
println(isValidUrl("ftp://example.com/path/to/file.txt")) // false
println(isValidUrl("http://localhost:8080")) // true
println(isValidUrl("http://127.0.0.1")) // true
```
该函数使用了一个较为复杂的正则表达式,可以较为准确地校验URL的格式。其中,该正则表达式包含以下几个部分:
1. `^https?://`:以 `http://` 或 `https://` 开头。
2. `(?:...|...)`:表示两个或多个可选的匹配项。
3. `[A-Z0-9_](?:[A-Z0-9_-]{0,61}[A-Z0-9_])?\.`:匹配域名中的一级和多级子域名,例如 `www.`、`blog.` 等。
4. `(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)`:匹配顶级域名,例如 `.com`、`.co.uk` 等。
5. `localhost`:匹配本地地址。
6. `\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`:匹配IP地址。
7. `(?::\d+)?`:匹配可选的端口号。
8. `(?:/?|[/?]\S+)$`:匹配可选的路径和查询参数。
如果URL符合以上规则,则返回 `true`,否则返回 `false`。