找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 6322|回复: 4

[问题求助] powershell中使用curl.exe传json数据的格式

[复制链接]
发表于 2025-6-2 22:11:12 | 显示全部楼层 |阅读模式
下面的代码中使用了curl.exe传json数据, 但是总是不成功, 求路过大佬指导, 多谢
  1. Write-Host "正在创建仓库..."
  2. $repoBody = @{
  3.     name       = $repo
  4.     auto_init  = $true
  5.     private    = $false
  6. } | ConvertTo-Json

  7. curl.exe -s -X POST `
  8.     -H "Authorization: token $token" `
  9.     -H "User-Agent: GitHubClient" `
  10.     -H "Content-Type: application/json" `
  11.     -d $repoBody `
  12.     "https://api.github.com/user/repos"
复制代码
 楼主| 发表于 2025-6-2 22:56:59 | 显示全部楼层
本帖最后由 小白龙 于 2025-6-3 05:20 编辑

不想使用直接的插值字符串, 想使用ConvertTo-Json转成json, 但是怎样在下面的curl.exe的-d参数中使用json呢, 求大佬支招!!
发表于 2025-6-3 13:53:39 | 显示全部楼层
ConvertTo-Json -Compress 把数据转成一行的 JSON,然后在 curl.exe 的 -d 参数中用双引号包住变量,就能正常发送了!
  1. # 设置你要创建的仓库名字和你的 token(GitHub 的登录凭证)
  2. $repo = "test-repo"
  3. $token = "你的-github-token"

  4. # 构造你要发给 GitHub 的数据(就是一个字典)
  5. $repoData = @{
  6.     name      = $repo       # 仓库名
  7.     auto_init = $true       # 自动初始化(就是创建个 README 啥的)
  8.     private   = $false      # 是不是私有仓库?false 表示公开
  9. }

  10. # 把上面那个数据转换成标准的 JSON 格式,并压缩成一行
  11. $repoBody = $repoData | ConvertTo-Json -Compress

  12. # 输出一下看看是不是对的(调试用)
  13. Write-Host "发送的内容是:$repoBody"

  14. # 开始发请求啦!用 curl.exe 发送到 GitHub 创建仓库
  15. curl.exe -s -X POST `
  16.     -H "Authorization: token $token" `     # 登录凭证
  17.     -H "User-Agent: GitHubClient" `        # 浏览器身份,GitHub 要求必须有
  18.     -H "Content-Type: application/json" `  # 告诉服务器我要发的是 JSON
  19.     -d "$repoBody" `                        # 这是我们刚刚构造的 JSON 数据
  20.     "https://api.github.com/user/repos"      # GitHub 的接口地址
复制代码
如果你运行后返回错误,比如 401 Unauthorized,那就是你的 token 错了
如果返回 422 Unprocessable Entity,说明你发的 JSON 格式有问题
发表于 2025-6-3 17:23:48 | 显示全部楼层
回复 1# 小白龙

调用 curl.exe ... 句式是走运行外部 *.exe 文件之道,此须特别处理(转义)其所带参数中包含的双引号,不如改用内置的对应功能模块 Invoke-WebRequest,其别名也是 curl,即可省去处理(转义)参数字符串中双引号的麻烦,示例如下...

  1. $url = 'https://api.github.com/user/repos'
  2. $repoBody = @{
  3.     name = $repo
  4.     auto_init = $true
  5.     private = $false
  6. } | ConvertTo-Json
  7. $headers = @{
  8.   'Authorization' = "token $token";
  9.   'User-Agent' = 'GitHubClient';
  10.   'Content-Type' = 'application/json'
  11. }
  12. curl -uri $url -body $repoBody -headers $headers -method Post
复制代码
 楼主| 发表于 2025-6-4 06:16:31 | 显示全部楼层
回复 3# 1139054012


    多谢, 试了不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:30 , Processed in 0.008824 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表