From 39254f1497783865696feea695927411188cb79d Mon Sep 17 00:00:00 2001 From: wenyongda Date: Fri, 27 Mar 2026 10:28:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20curl=20=E6=95=99=E7=A8=8B?= =?UTF-8?q?=E6=96=87=E7=AB=A0=EF=BC=8C=E6=9B=B4=E6=96=B0=20Claude=20Code?= =?UTF-8?q?=E3=80=81Python=20=E7=AD=89=E5=8D=9A=E5=AE=A2=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_posts/Claude-Code.md | 83 +++++- source/_posts/Python.md | 29 ++ source/_posts/Windows-Terminal.md | 1 + source/_posts/curl.md | 476 ++++++++++++++++++++++++++++++ 4 files changed, 586 insertions(+), 3 deletions(-) create mode 100644 source/_posts/curl.md diff --git a/source/_posts/Claude-Code.md b/source/_posts/Claude-Code.md index 487bd37..31f3f5b 100644 --- a/source/_posts/Claude-Code.md +++ b/source/_posts/Claude-Code.md @@ -64,11 +64,19 @@ export ANTHROPIC_API_KEY="your-api-key-here" **方式二:配置文件** -运行 `claude` 命令后会提示输入 API Key,会自动保存到配置文件中。 +```json +{ + "env": { + "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", + "ANTHROPIC_BASE_URL": "https://coding.dashscope.aliyuncs.com/apps/anthropic", + "ANTHROPIC_MODEL": "qwen3.5-plus" + } +} +``` 配置文件位置: -- Windows: `%APPDATA%\claude-code\config.json` -- macOS/Linux: `~/.config/claude-code/config.json` +- Windows: `%USERPROFILE%\.claude\settings.json` +- macOS/Linux: `~/.claude\settings.json` ### 3. 配置模型 @@ -114,6 +122,75 @@ claude mcp add fetch -- uvx mcp-server-fetch | filesystem | `claude mcp add filesystem -- npx -y @anthropic-ai/mcp-server-filesystem` | 文件系统访问 | | git | `claude mcp add git -- npx -y @anthropic-ai/mcp-server-git` | Git 操作 | +配置好的 MCP 配置文件实例 `~/.claude.json` + +```json +{ + "mcpServers": { + "context7": { + "command": "cmd", + "args": [ + "/c", + "npx", + "-y", + "@upstash/context7-mcp@latest" + ], + "env": { + "DEFAULT_MINIMUM_TOKENS": "10000" + } + }, + "Sequential Thinking": { + "command": "cmd", + "args": [ + "/c", + "npx", + "-y", + "@modelcontextprotocol/server-sequential-thinking" + ], + "env": {} + }, + "Playwright": { + "command": "cmd", + "args": [ + "/c", + "npx", + "-y", + "@executeautomation/playwright-mcp-server" + ], + "env": {} + }, + "Fetch": { + "command": "cmd", + "args": [ + "/c", + "uvx", + "mcp-server-fetch" + ], + "env": {} + }, + "MySQL": { + "command": "cmd", + "args": [ + "/c", + "uvx", + "--from", + "mysql-mcp-server", + "mysql_mcp_server" + ], + "env": { + "MYSQL_HOST": "127.0.0.1", + "MYSQL_PORT": "3306", + "MYSQL_USER": "root", + "MYSQL_PASSWORD": "123456", + "MYSQL_DATABASE": "db" + } + } + }, +} +``` + + + ### 查看已配置的 MCP ```bash diff --git a/source/_posts/Python.md b/source/_posts/Python.md index 6b68c09..e185165 100644 --- a/source/_posts/Python.md +++ b/source/_posts/Python.md @@ -77,3 +77,32 @@ import pcRequestspcRequestsc=pcRequestsc.__name__ ```shell 'pcRequests' ``` + +# UV + +## Python版本管理(安装和管理Python解释器) + +| 命令 | 说明 | +| ----------------------------- | -------------------------------------- | +| uv python list | 查看可用和已安装的Python 版本 | +| uv python install | 安装 Python 版本 | +| uv python find | 查找已安装的 Python信息 | +| uv python pin | 将当前项目固定使用特定 Python 版本 | +| uv python uninstall | 卸载 Python 版本 | +| uv python install --reinstall | 重新安装Python,适用于Python版本的更新 | + +## 项目管理(创建和开发带有 `pyproject.toml`的Python 项目) + +| **命令** | **说明** | +| ---------- | ------------------------------------------------------------ | +| uv init | 创建新 Python 项目并初始化该项目 | +| uv add | 为项目添加依赖,安装软件包并将依赖声明写入`pyproject.toml`文件 | +| uv remove | 从项目移除依赖,移除软件包并将依赖从文件`pyproject.toml`中移除 | +| uv sync | 同步项目依赖到环境 | +| uv lock | 为项目依赖创建锁文件 | +| uv run | 在项目环境中运行命令 | +| uv export | 将项目的锁文件导出为其他格式 | +| uv tree | 查看项目依赖树 | +| uv build | 构建项目为分发包 | +| uv publish | 发布项目到包索引 | + diff --git a/source/_posts/Windows-Terminal.md b/source/_posts/Windows-Terminal.md index 5c25c1e..194803c 100644 --- a/source/_posts/Windows-Terminal.md +++ b/source/_posts/Windows-Terminal.md @@ -104,6 +104,7 @@ SSH 的配置文件通常位于当前用户目录下的 `.ssh` 文件夹中。 ```json { + "icon": "C:\\Windows\\System32\\wsl.exe", "name": "user@machine ssh profile", "commandline": "ssh user@machine" } diff --git a/source/_posts/curl.md b/source/_posts/curl.md new file mode 100644 index 0000000..8107559 --- /dev/null +++ b/source/_posts/curl.md @@ -0,0 +1,476 @@ +--- +title: curl 命令完全指南 +date: 2026-03-27 10:10:35 +tags: + - curl + - Linux + - Windows + - API测试 +--- + +## 简介 + +curl (Client for URLs) 是一个强大的命令行工具,用于传输数据。它支持多种协议(HTTP、HTTPS、FTP等),是开发者和运维人员必备的工具之一。 + +## 安装 + +### Linux + +大多数 Linux 发行版已预装 curl: + +```bash +# Debian/Ubuntu +sudo apt install curl + +# CentOS/RHEL +sudo yum install curl + +# Arch Linux +sudo pacman -S curl + +# 验证安装 +curl --version +``` + +### Windows + +**方式一:Windows 10/11 自带** +Windows 10 1803+ 和 Windows 11 已内置 curl。 + +**方式二:手动安装** +1. 访问 https://curl.se/windows/ 下载 +2. 解压到 `C:\tools\curl` +3. 添加到系统 PATH 环境变量 + +**方式三:使用包管理器** +```powershell +# winget +winget install curl + +# Chocolatey +choco install curl + +# Scoop +scoop install curl +``` + +## 基础用法 + +### GET 请求 + +```bash +# 基本 GET 请求 +curl https://api.example.com/users + +# 带查询参数 +curl "https://api.example.com/users?page=1&limit=10" + +# 只显示响应头 +curl -I https://api.example.com + +# 显示响应头和响应体 +curl -i https://api.example.com + +# 跟随重定向 +curl -L https://example.com/redirect +``` + +### POST 请求 + +```bash +# 发送 JSON 数据(请求体) +curl -X POST https://api.example.com/users \ + -H "Content-Type: application/json" \ + -d '{"name": "张三", "email": "zhangsan@example.com"}' + +# 发送表单数据 +curl -X POST https://api.example.com/login \ + -d "username=admin&password=123456" + +# 发送文件 +curl -X POST https://api.example.com/upload \ + -F "file=@/path/to/file.jpg" + +# 发送多部分表单(文件+字段) +curl -X POST https://api.example.com/upload \ + -F "file=@/path/to/file.jpg" \ + -F "name=张三" \ + -F "description=用户头像" +``` + +### PUT / PATCH / DELETE 请求 + +```bash +# PUT 请求(完整更新) +curl -X PUT https://api.example.com/users/1 \ + -H "Content-Type: application/json" \ + -d '{"name": "李四", "email": "lisi@example.com"}' + +# PATCH 请求(部分更新) +curl -X PATCH https://api.example.com/users/1 \ + -H "Content-Type: application/json" \ + -d '{"name": "李四"}' + +# DELETE 请求 +curl -X DELETE https://api.example.com/users/1 +``` + +## 常用选项详解 + +| 选项 | 说明 | 示例 | +|------|------|------| +| `-X` | 指定请求方法 | `-X POST` | +| `-H` | 添加请求头 | `-H "Authorization: Bearer token"` | +| `-d` | 发送数据 | `-d '{"key":"value"}'` | +| `-F` | 上传文件/表单 | `-F "file=@photo.jpg"` | +| `-u` | 基础认证 | `-u user:pass` | +| `-I` | 只获取响应头 | `curl -I url` | +| `-i` | 显示响应头和内容 | `curl -i url` | +| `-L` | 跟随重定向 | `curl -L url` | +| `-o` | 保存到文件 | `-o output.json` | +| `-O` | 使用远程文件名保存 | `-O` | +| `-s` | 静默模式 | `-s` | +| `-v` | 显示详细信息 | `-v` | +| `-k` | 忽略 SSL 证书验证 | `-k` | +| `-x` | 使用代理 | `-x http://proxy:8080` | +| `--connect-timeout` | 连接超时(秒) | `--connect-timeout 10` | +| `-m` | 最大请求时间(秒) | `-m 30` | + +## 替代 Postman 的完整方案 + +### 1. 认证请求 + +```bash +# Bearer Token 认证 +curl -H "Authorization: Bearer your_token_here" \ + https://api.example.com/data + +# Basic Auth 认证 +curl -u "username:password" \ + https://api.example.com/data + +# API Key 认证(Header 方式) +curl -H "X-API-Key: your_api_key" \ + https://api.example.com/data + +# API Key 认证(Query 参数方式) +curl "https://api.example.com/data?api_key=your_api_key" +``` + +### 2. 处理 Cookie + +```bash +# 保存 Cookie 到文件 +curl -c cookies.txt https://api.example.com/login \ + -d "username=admin&password=123456" + +# 使用已保存的 Cookie +curl -b cookies.txt https://api.example.com/profile + +# 同时读写 Cookie +curl -b cookies.txt -c cookies.txt https://api.example.com/action + +# 直接设置 Cookie +curl -H "Cookie: session=abc123; token=xyz789" \ + https://api.example.com/data +``` + +### 3. 美化 JSON 输出 + +```bash +# 使用 jq 美化(Linux/macOS) +curl -s https://api.example.com/users | jq + +# 使用 Python 美化(跨平台) +curl -s https://api.example.com/users | python -m json.tool + +# Windows PowerShell 方式 +curl -s https://api.example.com/users | ConvertFrom-Json | ConvertTo-Json -Depth 10 +``` + +### 4. 保存请求集合 + +创建一个 `api-requests.sh` 文件: + +```bash +#!/bin/bash +# API 请求集合 - 类似 Postman Collection + +BASE_URL="https://api.example.com" +TOKEN="your_token_here" + +# 获取用户列表 +get_users() { + curl -s "$BASE_URL/users" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" +} + +# 创建用户 +create_user() { + curl -s -X POST "$BASE_URL/users" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"name": "张三", "email": "zhangsan@example.com"}' +} + +# 获取单个用户 +get_user() { + local id=$1 + curl -s "$BASE_URL/users/$id" \ + -H "Authorization: Bearer $TOKEN" +} + +# 调用示例 +case "$1" in + users) get_users | jq ;; + create) create_user | jq ;; + user) get_user "$2" | jq ;; + *) echo "用法: $0 {users|create|user }" ;; +esac +``` + +使用方式: +```bash +chmod +x api-requests.sh +./api-requests.sh users +./api-requests.sh create +./api-requests.sh user 1 +``` + +### 5. 环境变量配置 + +```bash +# 创建 .env 文件(添加到 .gitignore) +# .env +API_BASE_URL=https://api.example.com +API_TOKEN=your_token_here + +# 在脚本中使用 +source .env + +curl -H "Authorization: Bearer $API_TOKEN" \ + "$API_BASE_URL/users" +``` + +### 6. 环境切换 + +创建多环境配置: + +```bash +# environments.sh +get_env() { + case "$1" in + dev) + BASE_URL="https://dev-api.example.com" + TOKEN="$DEV_TOKEN" + ;; + staging) + BASE_URL="https://staging-api.example.com" + TOKEN="$STAGING_TOKEN" + ;; + prod) + BASE_URL="https://api.example.com" + TOKEN="$PROD_TOKEN" + ;; + *) + echo "未知环境: $1" + exit 1 + ;; + esac +} + +# 使用 +source environments.sh +get_env dev +curl -H "Authorization: Bearer $TOKEN" "$BASE_URL/users" +``` + +### 7. 测试脚本示例 + +```bash +#!/bin/bash +# API 测试脚本 + +BASE_URL="https://api.example.com" +TOKEN="test_token" + +echo "=== 测试用户 API ===" + +# 测试获取用户 +echo "1. GET /users" +response=$(curl -s -w "\n%{http_code}" "$BASE_URL/users" \ + -H "Authorization: Bearer $TOKEN") +http_code=$(echo "$response" | tail -n1) +body=$(echo "$response" | head -n -1) + +if [ "$http_code" -eq 200 ]; then + echo "✅ 成功 (HTTP $http_code)" + echo "$body" | jq +else + echo "❌ 失败 (HTTP $http_code)" + echo "$body" +fi + +# 测试创建用户 +echo -e "\n2. POST /users" +response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/users" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"name": "测试用户"}') +http_code=$(echo "$response" | tail -n1) +body=$(echo "$response" | head -n -1) + +if [ "$http_code" -eq 201 ]; then + echo "✅ 成功 (HTTP $http_code)" +else + echo "❌ 失败 (HTTP $http_code)" +fi +``` + +## Windows 特殊处理 + +### PowerShell 中的引号问题 + +PowerShell 对单引号和双引号有特殊处理,推荐以下方式: + +```powershell +# 方式一:使用双引号,内部双引号用反引号转义 +curl -X POST https://api.example.com/users ` + -H "Content-Type: application/json" ` + -d "{`"name`": `"张三`"}" + +# 方式二:使用单引号包裹 JSON(推荐) +curl -X POST https://api.example.com/users ` + -H "Content-Type: application/json" ` + -d '{"name": "张三"}' + +# 方式三:从文件读取数据 +curl -X POST https://api.example.com/users ` + -H "Content-Type: application/json" ` + -d "@request.json" +``` + +### Windows CMD 中的处理 + +```cmd +# 使用双引号,内部双引号用反斜杠转义 +curl -X POST https://api.example.com/users ^ + -H "Content-Type: application/json" ^ + -d "{\"name\": \"张三\"}" + +# 或使用文件 +curl -X POST https://api.example.com/users ^ + -H "Content-Type: application/json" ^ + -d "@request.json" +``` + +### 创建 request.json 文件 + +对于复杂的请求体,推荐使用文件: + +```json +{ + "name": "张三", + "email": "zhangsan@example.com", + "roles": ["admin", "user"], + "settings": { + "theme": "dark", + "language": "zh-CN" + } +} +``` + +```bash +curl -X POST https://api.example.com/users \ + -H "Content-Type: application/json" \ + -d @request.json +``` + +## 实用技巧 + +### 1. 测量请求时间 + +```bash +curl -w "DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \ + -o /dev/null -s https://api.example.com +``` + +### 2. 下载文件并显示进度 + +```bash +curl -O --progress-bar https://example.com/large-file.zip +``` + +### 3. 断点续传 + +```bash +curl -C - -O https://example.com/large-file.zip +``` + +### 4. 限速下载 + +```bash +# 限制为 1MB/s +curl --limit-rate 1M -O https://example.com/file.zip +``` + +### 5. 批量下载 + +```bash +# 下载多个文件 +curl -O https://example.com/file1.zip -O https://example.com/file2.zip + +# 使用序列 +curl -O https://example.com/file[1-10].jpg + +# 使用字母序列 +curl -O https://example.com/file[a-z].jpg +``` + +### 6. 调试请求 + +```bash +# 显示完整请求/响应信息 +curl -v https://api.example.com + +# 输出详细信息到文件 +curl --trace-ascii debug.txt https://api.example.com +``` + +## curl vs Postman 对比 + +| 功能 | curl | Postman | +|------|------|---------| +| 安装 | 系统内置/轻量 | 需下载安装 | +| 脚本化 | ✅ 原生支持 | ❌ 需导出 | +| 自动化 | ✅ 易于集成 CI/CD | 需 Newman | +| 资源占用 | 极低 | 较高 | +| 可视化 | ❌ 无 | ✅ 有 | +| 学习曲线 | 较陡 | 平缓 | +| 环境管理 | 手动配置 | 图形界面 | +| 团队协作 | Git + 脚本 | 云同步 | +| 价格 | 免费 | 免费版有限制 | + +## 快速参考 + +```bash +# 最常用的命令模板 +curl -X [METHOD] [URL] \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '[JSON_DATA]' | jq + +# 常用组合 +curl -s -X POST $URL -H $HEADERS -d $DATA | jq # 静默 POST,美化输出 +curl -I $URL # 检查响应头 +curl -L -I $URL # 跟随重定向并显示头 +curl -v $URL # 调试模式 +curl -u user:pass $URL # Basic Auth +``` + +## 总结 + +curl 是一个功能强大的 HTTP 客户端工具,通过脚本化和命令行参数可以完全替代 Postman 进行 API 测试。虽然缺少可视化界面,但其轻量、可自动化、易于集成的特点使其成为开发者和 DevOps 的首选工具。 + +掌握 curl 能让你在没有图形界面的服务器环境中也能灵活地进行 API 调试和测试,是每个开发者必备的技能。 \ No newline at end of file