| 140 | return ret |
| 141 | |
| 142 | def _download_json(self, url_or_request, *args, **kwargs): |
| 143 | headers = { |
| 144 | 'X-Udemy-Snail-Case': 'true', |
| 145 | 'X-Requested-With': 'XMLHttpRequest', |
| 146 | } |
| 147 | for cookie in self.cookiejar: |
| 148 | if cookie.name == 'client_id': |
| 149 | headers['X-Udemy-Client-Id'] = cookie.value |
| 150 | elif cookie.name == 'access_token': |
| 151 | headers['X-Udemy-Bearer-Token'] = cookie.value |
| 152 | headers['X-Udemy-Authorization'] = f'Bearer {cookie.value}' |
| 153 | |
| 154 | if isinstance(url_or_request, Request): |
| 155 | url_or_request.headers.update(headers) |
| 156 | else: |
| 157 | url_or_request = Request(url_or_request, headers=headers) |
| 158 | |
| 159 | response = super()._download_json(url_or_request, *args, **kwargs) |
| 160 | self._handle_error(response) |
| 161 | return response |
| 162 | |
| 163 | def _perform_login(self, username, password): |
| 164 | login_popup = self._download_webpage( |