def __callRequest(self): if self.__enableDNS: import socket self.save_getaddrinfo = socket.getaddrinfo socket.getaddrinfo = self.new_getaddrinfo if self.__aParamatersLine: sParameters = self.__aParamatersLine else: sParameters = urlEncode(self.__aParamaters) if (self.__cType == cRequestHandler.REQUEST_TYPE_GET): if (len(sParameters) > 0): if (self.__sUrl.find('?') == -1): self.__sUrl = self.__sUrl + '?' + str(sParameters) sParameters = '' else: self.__sUrl = self.__sUrl + '&' + str(sParameters) sParameters = '' if (len(sParameters) > 0): oRequest = urllib2.Request(self.__sUrl, sParameters) else: oRequest = urllib2.Request(self.__sUrl) for aHeader in self.__aHeaderEntries: for sHeaderKey, sHeaderValue in aHeader.items(): oRequest.add_header(sHeaderKey, sHeaderValue) sContent = '' try: if self.BUG_SSL: VSlog('Retrying with SSL bug') import ssl gcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23) oResponse = urllib2.urlopen(oRequest, timeout=self.__timeout, context=gcontext) else: oResponse = urllib2.urlopen(oRequest, timeout=self.__timeout) sContent = oResponse.read() self.__sResponseHeader = oResponse.info() # compressed page ? if self.__sResponseHeader.get('Content-Encoding') == 'gzip': import zlib sContent = zlib.decompress(sContent, zlib.MAX_WBITS | 16) # https://bugs.python.org/issue4773 self.__sRealUrl = oResponse.geturl() self.__sResponseHeader = oResponse.info() oResponse.close() except UrlError.HTTPError as e: if e.code == 503: # Protected by cloudFlare ? from resources.lib import cloudflare if cloudflare.CheckIfActive(e.read()): self.__sResponseHeader = e.hdrs cookies = self.GetCookies() VSlog('Page protegee par cloudflare') CF = cloudflare.CloudflareBypass() sContent = CF.GetHtml(self.__sUrl, e.read(), cookies, sParameters, oRequest.headers) self.__sRealUrl, self.__sResponseHeader = CF.GetReponseInfo( ) else: sContent = e.read() self.__sRealUrl = e.geturl() self.__sResponseHeader = e.headers() else: try: VSlog("%s (%d),%s" % (self.ADDON.VSlang(30205), e.code, self.__sUrl)) self.__sRealUrl = e.geturl() self.__sResponseHeader = e.headers sContent = e.read() except: sContent = '' if not sContent: self.DIALOG.VSerror( "%s (%d),%s" % (self.ADDON.VSlang(30205), e.code, self.__sUrl)) except UrlError.URLError as e: if 'CERTIFICATE_VERIFY_FAILED' in str( e.reason) and self.BUG_SSL == False: self.BUG_SSL = True return self.__callRequest() elif 'getaddrinfo failed' in str( e.reason) and self.__enableDNS == False: # Retry with DNS only if addon is present import xbmcvfs if xbmcvfs.exists( 'special://home/addons/script.module.dnspython/'): self.__enableDNS = True return self.__callRequest() else: error_msg = self.ADDON.VSlang(30470) else: error_msg = "%s (%s),%s" % (self.ADDON.VSlang(30205), e.reason, self.__sUrl) self.DIALOG.VSerror(error_msg) sContent = '' if sContent: if (self.__bRemoveNewLines == True): sContent = sContent.replace("\n", "") sContent = sContent.replace("\r\t", "") if (self.__bRemoveBreakLines == True): sContent = sContent.replace(" ", "") if self.__enableDNS: socket.getaddrinfo = self.save_getaddrinfo self.__enableDNS = False return sContent
def __callRequest(self): if self.__aParamatersLine: sParameters = self.__aParamatersLine else: sParameters = urllib.urlencode(self.__aParamaters) if (self.__cType == cRequestHandler.REQUEST_TYPE_GET): if (len(sParameters) > 0): if (self.__sUrl.find('?') == -1): self.__sUrl = self.__sUrl + '?' + str(sParameters) sParameters = '' else: self.__sUrl = self.__sUrl + '&' + str(sParameters) sParameters = '' if (len(sParameters) > 0): oRequest = urllib2.Request(self.__sUrl, sParameters) else: oRequest = urllib2.Request(self.__sUrl) for aHeader in self.__aHeaderEntries: for sHeaderKey, sHeaderValue in aHeader.items(): oRequest.add_header(sHeaderKey, sHeaderValue) sContent = '' try: oResponse = urllib2.urlopen(oRequest, timeout=self.__timeout) sContent = oResponse.read() self.__sResponseHeader = oResponse.info() #compressed page ? if self.__sResponseHeader.get('Content-Encoding') == 'gzip': import zlib sContent = zlib.decompress(sContent, zlib.MAX_WBITS | 16) #https://bugs.python.org/issue4773 self.__sRealUrl = oResponse.geturl() self.__sResponseHeader = oResponse.info() oResponse.close() except urllib2.HTTPError, e: if e.code == 503: #Protected by cloudFlare ? from resources.lib import cloudflare if cloudflare.CheckIfActive(e.read()): cookies = self.GetCookies() print 'Page protegee par cloudflare' CF = cloudflare.CloudflareBypass() sContent = CF.GetHtml(self.__sUrl, e.read(), cookies, sParameters, oRequest.headers) self.__sRealUrl, self.__sResponseHeader = CF.GetReponseInfo( ) if not sContent: self.DIALOG.VSerror( "%s (%d),%s" % (self.ADDON.VSlang(30205), e.code, self.__sUrl)) return ''
def __callRequest(self): if self.__enableDNS: socket.getaddrinfo = new_getaddrinfo if self.__aParamatersLine: sParameters = self.__aParamatersLine else: sParameters = urllib.urlencode(self.__aParamaters) if (self.__cType == cRequestHandler.REQUEST_TYPE_GET): if (len(sParameters) > 0): if (self.__sUrl.find('?') == -1): self.__sUrl = self.__sUrl + '?' + str(sParameters) sParameters = '' else: self.__sUrl = self.__sUrl + '&' + str(sParameters) sParameters = '' if (len(sParameters) > 0): oRequest = urllib2.Request(self.__sUrl, sParameters) else: oRequest = urllib2.Request(self.__sUrl) for aHeader in self.__aHeaderEntries: for sHeaderKey, sHeaderValue in aHeader.items(): oRequest.add_header(sHeaderKey, sHeaderValue) sContent = '' try: if self.__enableSSL: VSlog('Retrying with SSL bug') import ssl # gcontext = ssl.SSLContext(ssl.PROTOCOL_TLS) gcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23) oResponse = urllib2.urlopen(oRequest, timeout = self.__timeout,context=gcontext) else: oResponse = urllib2.urlopen(oRequest, timeout = self.__timeout) sContent = oResponse.read() self.__sResponseHeader = oResponse.info() #compressed page ? if self.__sResponseHeader.get('Content-Encoding') == 'gzip': import zlib sContent = zlib.decompress(sContent, zlib.MAX_WBITS|16) #https://bugs.python.org/issue4773 self.__sRealUrl = oResponse.geturl() self.__sResponseHeader = oResponse.info() oResponse.close() except urllib2.HTTPError, e: if e.code == 503: #Protected by cloudFlare ? from resources.lib import cloudflare if cloudflare.CheckIfActive(e.read()): self.__sResponseHeader = e.hdrs cookies = self.GetCookies() VSlog( 'Page protegee par cloudflare') CF = cloudflare.CloudflareBypass() sContent = CF.GetHtml(self.__sUrl,e.read(),cookies,sParameters,oRequest.headers) self.__sRealUrl, self.__sResponseHeader = CF.GetReponseInfo() else: sContent = e.read() self.__sRealUrl = e.geturl() self.__sResponseHeader = e.headers() else: try: VSlog("%s (%d),%s" % (VSlang(30205), e.code , self.__sUrl)) self.__sRealUrl = e.geturl() self.__sResponseHeader = e.headers sContent = e.read() except: sContent = '' if not sContent: VSlog("%s 1: (%d),%s" % (VSlang(30205), e.code , self.__sUrl)) if self.__enableDNS: socket.getaddrinfo = prv_getaddrinfo self.__enableDNS = False return ''
def __callRequest(self, jsonDecode=False): if self.__enableDNS: import socket self.save_getaddrinfo = socket.getaddrinfo socket.getaddrinfo = self.new_getaddrinfo if self.__aParamatersLine: sParameters = self.__aParamatersLine else: sParameters = self.__aParamaters if (self.__cType == cRequestHandler.REQUEST_TYPE_GET): if (len(sParameters) > 0): if (self.__sUrl.find('?') == -1): self.__sUrl = self.__sUrl + '?' + str(sParameters) sParameters = '' else: self.__sUrl = self.__sUrl + '&' + str(sParameters) sParameters = '' sContent = '' if self.__cType == cRequestHandler.REQUEST_TYPE_GET: method = "GET" else: method = "POST" try: _request = Request(method, self.__sUrl, headers=self.__aHeaderEntries) if method in ['POST', 'PATCH', 'PUT']: _request.data = sParameters if self.__Cookie: _request.cookies = self.__Cookie if self.json: _request.json = self.json prepped = _request.prepare() self.s.headers.update(self.__aHeaderEntries) oResponse = self.s.send(prepped, timeout=self.__timeout, allow_redirects=self.redirects, verify=self.verify) self.__sResponseHeader = oResponse.headers self.__sRealUrl = oResponse.url if jsonDecode==False: sContent = oResponse.content #Necessaire pour Python 3 if isMatrix(): try: sContent = sContent.decode('unicode-escape') except: try: sContent = sContent.decode() except: pass else: sContent = oResponse.json() except HTTPError as e: if 'CERTIFICATE_VERIFY_FAILED' in str(e.reason) and self.BUG_SSL == False: self.BUG_SSL = True return self.__callRequest() elif 'getaddrinfo failed' in str(e.reason) and self.__enableDNS == False: # Retry with DNS only if addon is present import xbmcvfs if xbmcvfs.exists('special://home/addons/script.module.dnspython/'): self.__enableDNS = True return self.__callRequest() else: error_msg = addon().VSlang(30470) else: error_msg = "%s (%s),%s" % (addon().VSlang(30205), e.reason, self.__sUrl) dialog().VSerror(error_msg) sContent = '' if oResponse.status_code == 503: # Protected by cloudFlare ? from resources.lib import cloudflare if cloudflare.CheckIfActive(sContent): cookies = self.GetCookies() VSlog('Page protegee par cloudflare') CF = cloudflare.CloudflareBypass() sContent = CF.GetHtml(self.__sUrl, sContent, cookies, sParameters, oResponse.headers) self.__sRealUrl, self.__sResponseHeader = CF.GetReponseInfo() if not sContent: #Ignorer ces deux codes erreurs. ignoreStatus = [200,302] if oResponse.status_code not in ignoreStatus: dialog().VSerror("%s (%d),%s" % (addon().VSlang(30205), oResponse.status_code, self.__sUrl)) if sContent: if (self.__bRemoveNewLines == True): sContent = sContent.replace("\n", "") sContent = sContent.replace("\r\t", "") if (self.__bRemoveBreakLines == True): sContent = sContent.replace(" ", "") if self.__enableDNS: socket.getaddrinfo = self.save_getaddrinfo self.__enableDNS = False return sContent