从Python迁移到Powerhsell后API响应为空

bxjv4tth  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(82)

我开发了一个机器人来通过Python中的“API”抓取一些信息,现在我想将堆栈更改为Powershell。
我对其中一个请求有困难。在Python中,它的工作方式就像一个魅力,但在PowerShell上,我无法让它以同样的方式工作。
在Python中,我只创建有效负载

arrayWebCodes = ["PR1234", "PR3456"]
  payloadStock={
        "productsCN[]": arrayWebCodes ,
        "productsCC[]": arrayWebCodes 
    }
  response = s.post(urlStock, data=payloadStock)

字符串
这是因为我想在一个单一的呼叫中获得多个产品的信息。
当我尝试在PowerShell上实现相同的功能时,响应为空。

$arrayProducts = @("PR1234", "PR73456")
$payloadStock = [ordered]@{
    "productsCN[]" = $arrayProducts
    "productsCC[]" = $arrayProducts
}
$response = Invoke-WebRequest -Uri $urlStock -body $payloadStock -Method "POST" -WebSession $webSession


不知何故,Powershell的数组哈希表与我在这里尝试实现的Python数组字典有一些不同。
如果我在PowerShell中只使用一个代码实现请求,它就可以工作。如果我从:

$codProduct1 = "PR1234"
$codProduct2 = "PR3456"
$payloadStock = [ordered]@{
    "productsCN[]" = $codProduct1, $codProduct2
    "productsCC[]" = $codProduct1, $codProduct2
}
$response = Invoke-WebRequest -Uri $urlStock -body $payloadStock -Method "POST" -WebSession $webSession


致:

$codProduct1 = "PR1234"
    $codProduct2 = "PR3456"
    $payloadStock = [ordered]@{
        "productsCN[]" = $codProduct1
        "productsCC[]" = $codProduct1
    }
    $response = Invoke-WebRequest -Uri $urlStock -body $payloadStock -Method "POST" -WebSession $webSession


它的工作…
我就要辞职了,任何帮助都很感激。

5fjcxozz

5fjcxozz1#

这不是你问题的答案,只是为了确定。
这应该是相同的:

Python

import json

arrayWebCodes = ["PR1234", "PR3456"]
payloadStock={
    "productsCN[]": arrayWebCodes ,
    "productsCC[]": arrayWebCodes 
}
print(json.dumps(payloadStock))

个字符

PowerShell

$arrayProducts = @("PR1234", "PR73456")
$payloadStock = [ordered]@{
    "productsCN[]" = $arrayProducts
    "productsCC[]" = $arrayProducts
}
$payloadStock | ConvertTo-Json -Compress
{"productsCN[]":["PR1234","PR73456"],"productsCC[]":["PR1234","PR73456"]}

的字符串
我怀疑Invoke-WebRequest -body可能有与unexpected ConvertTo-Json results? Answer: it has a default -Depth of 2相同的-Depth默认问题。
如果将-body作为(json)字符串提供,会发生什么:

$jsonPayload = $payloadStock | ConvertTo-Json -Compress -Depth 9
$response = Invoke-WebRequest -Uri $urlStock -body $jsonPayload -Method GET -WebSession $webSession

相关问题