发送请求并返回 JSON 数据 Args: method: HTTP 方法 path: 请求路径(以 / 开头) retry_on_auth_error: 认证失败时是否重试 **kwargs: 传递给 requests 的额外参数 Returns: 响应 JSON 数据 Raises: EmailServiceError: 请求失败
(
self,
method: str,
path: str,
retry_on_auth_error: bool = True,
**kwargs
)
| 166 | } |
| 167 | |
| 168 | def _make_request( |
| 169 | self, |
| 170 | method: str, |
| 171 | path: str, |
| 172 | retry_on_auth_error: bool = True, |
| 173 | **kwargs |
| 174 | ) -> Any: |
| 175 | """ |
| 176 | 发送请求并返回 JSON 数据 |
| 177 | |
| 178 | Args: |
| 179 | method: HTTP 方法 |
| 180 | path: 请求路径(以 / 开头) |
| 181 | retry_on_auth_error: 认证失败时是否重试 |
| 182 | **kwargs: 传递给 requests 的额外参数 |
| 183 | |
| 184 | Returns: |
| 185 | 响应 JSON 数据 |
| 186 | |
| 187 | Raises: |
| 188 | EmailServiceError: 请求失败 |
| 189 | """ |
| 190 | url = f"{self.config['base_url']}{path}" |
| 191 | kwargs.setdefault("headers", {}) |
| 192 | kwargs["headers"].update(self._get_headers()) |
| 193 | kwargs.setdefault("timeout", self.config["timeout"]) |
| 194 | |
| 195 | try: |
| 196 | response = self.session.request(method, url, **kwargs) |
| 197 | |
| 198 | if response.status_code >= 400: |
| 199 | # 如果是认证错误且允许重试,刷新 token 后重试一次 |
| 200 | if response.status_code == 401 and retry_on_auth_error: |
| 201 | logger.warning("Cloud Mail 认证失败,尝试刷新 token") |
| 202 | kwargs["headers"].update(self._get_headers(self._get_token(force_refresh=True))) |
| 203 | response = self.session.request(method, url, **kwargs) |
| 204 | |
| 205 | if response.status_code >= 400: |
| 206 | error_msg = f"请求失败: {response.status_code}" |
| 207 | try: |
| 208 | error_data = response.json() |
| 209 | error_msg = f"{error_msg} - {error_data}" |
| 210 | except Exception: |
| 211 | error_msg = f"{error_msg} - {response.text[:200]}" |
| 212 | self.update_status(False, EmailServiceError(error_msg)) |
| 213 | raise EmailServiceError(error_msg) |
| 214 | |
| 215 | try: |
| 216 | return response.json() |
| 217 | except Exception: |
| 218 | return {"raw_response": response.text} |
| 219 | |
| 220 | except requests.RequestException as e: |
| 221 | self.update_status(False, e) |
| 222 | raise EmailServiceError(f"请求失败: {method} {path} - {e}") |
| 223 | except Exception as e: |
| 224 | self.update_status(False, e) |
| 225 | if isinstance(e, EmailServiceError): |
no test coverage detected