| |
| """ |
| 测试第三方Token认证功能 |
| 只测试Authorization header方式的认证 |
| """ |
|
|
| import requests |
| import json |
| import sys |
| import time |
|
|
| def test_token_authentication(): |
| """测试Token认证功能""" |
| |
| |
| BASE_URL = "http://localhost:8000" |
| TEST_TOKEN = "0c4763d5b1aa561a5032f50e95bf069afa9a9e55" |
| |
| print("=" * 60) |
| print("第三方Token认证测试 (仅Authorization Header)") |
| print("=" * 60) |
| |
| |
| print("\n1. 测试Token前缀认证...") |
| try: |
| headers = { |
| 'Authorization': f'Token {TEST_TOKEN}', |
| 'Content-Type': 'application/json' |
| } |
| |
| response = requests.get(f"{BASE_URL}/api/projects/", headers=headers, timeout=10) |
| |
| if response.status_code == 200: |
| print("✅ Token前缀认证成功") |
| data = response.json() |
| print(f" 响应数据: {json.dumps(data, indent=2, ensure_ascii=False)}") |
| elif response.status_code == 401: |
| print("❌ Token前缀认证失败 - 401 Unauthorized") |
| print(f" 响应: {response.text}") |
| else: |
| print(f"⚠️ Token前缀认证 - 状态码: {response.status_code}") |
| print(f" 响应: {response.text}") |
| |
| except requests.RequestException as e: |
| print(f"❌ Token前缀认证请求失败: {e}") |
| |
| |
| print("\n2. 测试Bearer前缀认证...") |
| try: |
| headers = { |
| 'Authorization': f'Bearer {TEST_TOKEN}', |
| 'Content-Type': 'application/json' |
| } |
| |
| response = requests.get(f"{BASE_URL}/api/projects/", headers=headers, timeout=10) |
| |
| if response.status_code == 200: |
| print("✅ Bearer前缀认证成功") |
| data = response.json() |
| print(f" 响应数据: {json.dumps(data, indent=2, ensure_ascii=False)}") |
| elif response.status_code == 401: |
| print("❌ Bearer前缀认证失败 - 401 Unauthorized") |
| print(f" 响应: {response.text}") |
| else: |
| print(f"⚠️ Bearer前缀认证 - 状态码: {response.status_code}") |
| print(f" 响应: {response.text}") |
| |
| except requests.RequestException as e: |
| print(f"❌ Bearer前缀认证请求失败: {e}") |
| |
| |
| print("\n3. 测试无效Token...") |
| try: |
| headers = { |
| 'Authorization': 'Token invalid_token_123', |
| 'Content-Type': 'application/json' |
| } |
| |
| response = requests.get(f"{BASE_URL}/api/projects/", headers=headers, timeout=10) |
| |
| if response.status_code == 401: |
| print("✅ 无效Token正确被拒绝") |
| print(f" 响应: {response.text}") |
| else: |
| print(f"❌ 无效Token测试失败 - 状态码: {response.status_code}") |
| print(f" 响应: {response.text}") |
| |
| except requests.RequestException as e: |
| print(f"❌ 无效Token测试请求失败: {e}") |
| |
| |
| print("\n4. 测试无Authorization header...") |
| try: |
| headers = { |
| 'Content-Type': 'application/json' |
| } |
| |
| response = requests.get(f"{BASE_URL}/api/projects/", headers=headers, timeout=10) |
| |
| if response.status_code == 401: |
| print("✅ 无Authorization header正确被拒绝") |
| print(f" 响应: {response.text}") |
| else: |
| print(f"❌ 无Authorization header测试失败 - 状态码: {response.status_code}") |
| print(f" 响应: {response.text}") |
| |
| except requests.RequestException as e: |
| print(f"❌ 无Authorization header测试请求失败: {e}") |
| |
| |
| print("\n5. 测试错误的Authorization格式...") |
| try: |
| headers = { |
| 'Authorization': f'Basic {TEST_TOKEN}', |
| 'Content-Type': 'application/json' |
| } |
| |
| response = requests.get(f"{BASE_URL}/api/projects/", headers=headers, timeout=10) |
| |
| if response.status_code == 401: |
| print("✅ 错误Authorization格式正确被拒绝") |
| print(f" 响应: {response.text}") |
| else: |
| print(f"❌ 错误Authorization格式测试失败 - 状态码: {response.status_code}") |
| print(f" 响应: {response.text}") |
| |
| except requests.RequestException as e: |
| print(f"❌ 错误Authorization格式测试请求失败: {e}") |
| |
| |
| print("\n6. 测试查询参数方式(应该被拒绝)...") |
| try: |
| response = requests.get(f"{BASE_URL}/api/projects/?token={TEST_TOKEN}", timeout=10) |
| |
| if response.status_code == 401: |
| print("✅ 查询参数方式正确被拒绝") |
| print(f" 响应: {response.text}") |
| else: |
| print(f"❌ 查询参数方式测试失败 - 状态码: {response.status_code}") |
| print(f" 响应: {response.text}") |
| |
| except requests.RequestException as e: |
| print(f"❌ 查询参数方式测试请求失败: {e}") |
|
|
| def test_third_party_api(): |
| """测试第三方API连接""" |
| print("\n" + "=" * 60) |
| print("第三方API连接测试") |
| print("=" * 60) |
| |
| try: |
| url = "http://27.223.62.254:10008/user/valid_token/" |
| headers = { |
| 'accept': 'application/json', |
| 'X-CSRFToken': 'ARNjGjIoXRiA5I5LwmKcUDB5GGzPtMofGDJW5UcBsjWAolmvA8iZoLjWMxFepakY' |
| } |
| |
| files = {'user_token': (None, "0c4763d5b1aa561a5032f50e95bf069afa9a9e55")} |
| |
| response = requests.post(url, headers=headers, files=files, timeout=10) |
| |
| print(f"第三方API响应状态码: {response.status_code}") |
| print(f"第三方API响应内容: {response.text}") |
| |
| if response.status_code == 200: |
| data = response.json() |
| if data.get('code') == '200' and data.get('message') == 'succeed': |
| print("✅ 第三方API验证成功") |
| user_name = data.get('data', {}).get('user_name') |
| print(f" 用户名: {user_name}") |
| else: |
| print("❌ 第三方API验证失败") |
| else: |
| print("❌ 第三方API连接失败") |
| |
| except requests.RequestException as e: |
| print(f"❌ 第三方API连接错误: {e}") |
|
|
| def main(): |
| """主函数""" |
| print("开始Token认证测试...") |
| print("确保Django服务已启动在 http://localhost:8000") |
| |
| |
| input("按回车键开始测试...") |
| |
| |
| test_token_authentication() |
| |
| |
| test_third_party_api() |
| |
| print("\n" + "=" * 60) |
| print("测试完成!") |
| print("=" * 60) |
|
|
| if __name__ == "__main__": |
| main() |