首页 > 解决方案 > 如何在不下载的情况下获取 Nuget 包的 sha256?

问题描述

我想使用 Curl 来获取给定 Nuget 包和版本的 sha256。我认为这些天这是 Nuget API 的一部分,但是我需要点击什么 URL 才能获取哈希?

标签: nuget

解决方案


感谢您的链接,毛里西奥·谢弗

这是来自 Paket的相关片段:

open System.Net
open System.Xml.Linq

let getDetailsFromNuget name version =
  async {
    use wc = new WebClient()

    let! data =
      sprintf "https://www.nuget.org/api/v2/Packages(Id='%s',Version='%s')" name version
      |> wc.DownloadStringTaskAsync
      |> Async.AwaitTask

    let data = XDocument.Parse data

    let getAttribute attribute =
      let rootNs = XName.Get("entry", "http://www.w3.org/2005/Atom")

      let propertiesNs =
          XName.Get("properties", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata")

      let attributesNs attribute =
          XName.Get(attribute, "http://schemas.microsoft.com/ado/2007/08/dataservices")

      let properties =
          rootNs
          |> data.Element
          |> fun entry -> entry.Element(propertiesNs)

      properties.Element(attributesNs attribute).Value

    let packageHash = getAttribute "PackageHash"
    let packageHashAlgorithm = getAttribute "PackageHashAlgorithm"

    return packageHash, packageHashAlgorithm
  }

getDetailsFromNuget "FSharp.Core" "4.3.2"
|> Async.RunSynchronously
|> printfn "%A"

输出:

("CR5/gOr3EXghLOih4N+l8rlM4n5V3Vniv8L8tAeft5+P2QPSpU4CHF0YoTCXUpqfKXRQpvPej70MjHpBfgXJDA==", "SHA512")

PackageHashAlgorithm应该是"SHA256"或。"SHA512"


推荐阅读