def get_raw(self, url):
		"""All API calls to base url."""
		request = urllib.request.Request(url)
		try:
			context = ssl._create_unverified_context()
		except:
			# Some blender packaged python versions don't have this, largely
			# useful for local network setups otherwise minimal impact.
			context = None

		# Setup private request headers if appropriate.
		if self._engine.token is not None:
			if self._engine.name == "gitlab":
				request.add_header('PRIVATE-TOKEN', self._engine.token)
			else:
				self.print_verbose("Tokens not setup for engine yet")

		# Always set user agent.
		request.add_header(
			'User-Agent', "Python/" + str(platform.python_version()))

		# Run the request.
		try:
			if context:
				result = urllib.request.urlopen(request, context=context)
			else:
				result = urllib.request.urlopen(request)
		except urllib.error.HTTPError as e:
			if str(e.code) == "403":
				self._error = "HTTP error (access denied)"
				self._error_msg = str(e.code) + " - server error response"
				print(self._error, self._error_msg)
			else:
				self._error = "HTTP error"
				self._error_msg = str(e.code)
				print(self._error, self._error_msg)
			self.print_trace()
			self._update_ready = None
		except urllib.error.URLError as e:
			reason = str(e.reason)
			if "TLSV1_ALERT" in reason or "SSL" in reason.upper():
				self._error = "Connection rejected, download manually"
				self._error_msg = reason
				print(self._error, self._error_msg)
			else:
				self._error = "URL error, check internet connection"
				self._error_msg = reason
				print(self._error, self._error_msg)
			self.print_trace()
			self._update_ready = None
			return None
		else:
			result_string = result.read()
			result.close()
			return result_string.decode()