首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IronPython中的urllib出现PROTOCOL_TLS错误

IronPython中的urllib出现PROTOCOL_TLS错误
EN

Stack Overflow用户
提问于 2018-03-14 01:51:23
回答 1查看 387关注 0票数 2

我正在使用一个由twitch机器人加载的python脚本。不幸的是,bot不包括if then else的逻辑处理程序,但幸运的是,它有python脚本支持来处理bot外部的逻辑。

在导入urllib后使用urllib.urlopen时,此错误返回:

消息:未定义全局名称'PROTOCOL_TLS‘

我已经在集成开发环境中构建了机器人外部的代码,并且代码执行得很好,所以看起来IronPython需要做一些特殊的事情来处理调用,而不是常规的Python。

整个脚本文件包含返回到集成的附加信息,但整个文件是:

代码语言:javascript
复制
#---------------------------------------
# Import Libraries
#---------------------------------------

import os
import urllib

#---------------------------------------
#         Version History
#---------------------------------------
# 1.0.0.0 Initial Release.

#---------------------------------------
# Variables
#---------------------------------------
SettingsFile = os.path.join(os.path.dirname(__file__), "SCShoutoutSettings.json")

#---------------------------------------
# Classes
#---------------------------------------
class Settings(object):
    def __init__(self, settingsfile=None):
        try:
            with codecs.open(settingsfile, encoding="utf-8-sig", mode="r") 
as f:
                self.__dict__ = json.load(f, encoding="utf-8")
        except:
            self.Enabled = True
            self.Command = "!so"
            self.CD_Time = 0
            self.Permissions = "Moderator"
            self.Fee = False
            self.Cost = 0

    def Reload(self, jsondata):
        self.__dict__ = json.loads(jsondata, encoding="utf-8")
    return

def Save(self, settingsfile):
    try:
        with codecs.open(settingsfile, encoding="utf-8-sig", mode="w+") as f:
            json.dump(self.__dict__, f, encoding="utf-8", ensure_ascii=False)
        with codecs.open(settingsfile.replace("json", "js"), encoding="utf-8-sig", mode="w+") as f:
            f.write("var settings = {0};".format(json.dumps(self.__dict__, encoding='utf-8', ensure_ascii=False)))
    except:
        Parent.Log(ScriptName, "Failed to save settings to file.")
    return

#---------------------------------------
# Initialize Data on Load
#---------------------------------------
def Init():
    global ScriptSettings
    ScriptSettings = Settings(SettingsFile)
    return

#---------------------------------------
# Reload Settings on Save
#---------------------------------------
def ReloadSettings(jsondata):
    ScriptSettings.Reload(jsondata)
    return

#---------------------------------------
#    Script is going to be unloaded
#---------------------------------------
def Unload():
    ScriptSettings.Save(SettingsFile)
    return

#---------------------------------------
#    Script is enabled or disabled on UI
#---------------------------------------
def ScriptToggled(state):
    if not state:
        ScriptSettings.Save(SettingsFile)
    return

#---------------------------------------
# Execute data and process messages
#---------------------------------------
 def Execute(data):

    if data.IsChatMessage():
        global ScriptSettings
        if data.GetParam(0).lower() == ScriptSettings.Command:
        target = data.GetParam(1)
        gameLink = "http://customapi.deepbot.tv/streamgame/" + target
        followLink = "http://customapi.deepbot.tv/totalfollows/" + target
        twitchLink = "https://twitch.tv/" + target
        gameSock = urllib.urlopen(gameLink)
        followSock = urllib.urlopen(followLink)
        game = gameSock.read()
        gameSock.close()
        follow = followSock.read()
        followSock.close()
        if game == "Error reaching Twitch API.":
            message = target + " is not a streamer"
        else:
            message = "Check out " + target + " the last game they were playing was " + game + " they have " + follow + " followers, why not add some more?  Go to " + twitchLink

        Parent.SendStreamMessage(message)
return

#---------------------------------------
# Tick
#---------------------------------------
def Tick():
    return

#---------------------------------------
# SetDefaults Custom User Interface Button
#---------------------------------------
def SetDefaults():

    # Globals
    global ScriptSettings

    # Set defaults by not supplying a settings file
    ScriptSettings = Settings()

    # Save defaults back to file
    ScriptSettings.Save(SettingsFile)

    # End of SetDefaults
    return
EN

回答 1

Stack Overflow用户

发布于 2018-08-27 03:19:09

这是由IronPython中的一个问题引起的,它是streamlabs聊天机器人中使用的python版本(是的,我知道您正在谈论那个^^ )。这是urllib使用的ssl模块中的一个问题。这也是为什么聊天机器人会看到以下功能的原因:

https://github.com/AnkhHeart/Streamlabs-Chatbot-Python-Boilerplate/wiki/API-Requests

我自己也在寻找解决方案,但到目前为止,我不得不重写所有内容才能使用这些函数。这也是为什么urllib2、requests和许多其他模块不能工作的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49262712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档