ModelScope中这个错误怎么办呀?

requests.exceptions.ProxyError: HTTPSConnectionPool(host='http://www.modelscope.cn', port=443): Max retries exceeded with url: /api/v1/models/iic/nlp_raner_named-entity-recognition_chinese-base-cmeee/revisions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))),ModelScope中这个错误怎么办呀?

展开
收起
小小鹿鹿鹿 2024-03-05 16:18:51 828 分享 版权
阿里云 AI 助理回答

根据您提供的错误信息,requests.exceptions.ProxyError 表明在尝试通过代理连接到目标服务器时发生了问题。具体错误提示 WinError 10061 表示目标计算机拒绝了连接请求。这通常与网络配置、代理设置或目标服务的可用性有关。

以下是针对该问题的详细分析和解决方案:


1. 检查代理设置

错误信息中提到 ProxyError,说明您的代码可能配置了代理,但代理无法正常工作。请检查以下内容: - 是否需要代理:如果目标服务(如 ModelScope)可以直接访问,建议移除代理设置。 - 代理配置是否正确:如果您确实需要使用代理,请确保代理地址和端口配置正确,并且代理服务正在运行。

解决方法:

在代码中显式禁用代理,或者检查代理配置是否正确。例如:

import requests

# 禁用代理
proxies = {
    "http": None,
    "https": None,
}

response = requests.get(
    "https://www.modelscope.cn/api/v1/models/iic/nlp_raner_named-entity-recognition_chinese-base-cmeee/revisions",
    proxies=proxies
)
print(response.text)

如果必须使用代理,请确保代理地址有效:

proxies = {
    "http": "http://your-proxy-server:port",
    "https": "http://your-proxy-server:port",
}
response = requests.get(url, proxies=proxies)

2. 检查目标服务的可用性

错误信息表明目标主机 http://www.modelscope.cn 的连接被拒绝。请确认以下几点: - 目标服务是否可用:访问 https://www.modelscope.cn,确保服务正常运行。 - URL 是否正确:检查请求的 URL 是否拼写正确,尤其是协议部分(应为 https:// 而非 http://)。

解决方法:

直接在浏览器中访问目标 URL,验证服务是否正常响应。如果服务不可用,请联系 ModelScope 技术支持团队。


3. 防火墙或网络限制

错误 WinError 10061 可能是由于本地防火墙或网络策略阻止了对外部服务的访问。请检查以下内容: - 本地防火墙规则:确保允许 Python 或相关工具访问外部网络。 - 公司网络限制:如果您在公司内网环境中,可能存在网络限制。尝试切换到其他网络(如手机热点)进行测试。

解决方法:

  • 暂时关闭防火墙,测试是否可以正常连接。
  • 如果在公司内网环境中,联系网络管理员确认是否有访问限制。

4. 使用 IP 直连方案(可选)

如果目标服务支持通过 IP 地址访问,您可以尝试使用 IP 直连的方式绕过域名解析问题。参考知识库中的 IP 直连方案,可以通过自定义 HostHeaderSSLAdapter 实现。

示例代码:

import requests
from urllib.parse import urlparse

class HostHeaderSSLAdapter(requests.adapters.HTTPAdapter):
    def __init__(self, resolved_ip):
        super().__init__()
        self.resolved_ip = resolved_ip

    def send(self, request, **kwargs):
        connection_pool_kwargs = self.poolmanager.connection_pool_kw
        result = urlparse(request.url)
        if result.scheme == 'https' and self.resolved_ip:
            request.url = request.url.replace(
                'https://' + result.hostname,
                'https://' + self.resolved_ip,
            )
            connection_pool_kwargs['assert_hostname'] = result.hostname
            request.headers['Host'] = result.hostname
        else:
            connection_pool_kwargs.pop('assert_hostname', None)
        return super().send(request, **kwargs)

def access_url(url, resolved_ip):
    session = requests.Session()
    parsed_url = urlparse(url)
    hostname = parsed_url.hostname
    session.mount('https://' + hostname, HostHeaderSSLAdapter(resolved_ip))
    try:
        r = session.get(url)
        print("Success:", r.text)
    except Exception as e:
        print("Error:", str(e))

# 替换为目标服务的实际 IP 地址
access_url("https://www.modelscope.cn/api/v1/models/iic/nlp_raner_named-entity-recognition_chinese-base-cmeee/revisions", "目标IP地址")

5. 其他注意事项

  • 证书校验问题:如果目标服务的 SSL 证书无效或不匹配,可能会导致连接失败。您可以临时禁用证书校验(仅用于调试):

    response = requests.get(url, verify=False)
    

    注意:生产环境中不建议禁用证书校验,可能存在安全风险。

  • SNI 配置:如果目标服务使用了 SNI(Server Name Indication),请确保客户端支持 SNI 配置。参考知识库中的 SNI 场景解决方案。


总结

根据上述分析,您可以按照以下步骤排查和解决问题: 1. 检查并调整代理设置。 2. 验证目标服务的可用性和 URL 正确性。 3. 排查本地防火墙或网络限制。 4. 尝试使用 IP 直连方案。 5. 确保证书校验和 SNI 配置正确。

如果问题仍未解决,请提供更多上下文信息(如完整的代码片段或网络环境描述),以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉答疑群:44837352

还有其他疑问?
咨询AI助理