json - Invoke-RestMethod - POST 响应格式不是 JSON?
问题描述
如果我使用 PUT、DELETE 或 GET 等方法,我没有任何问题。
$wresponse
是正常的 JSON 响应。
当我尝试使用 POST 时,我得到的响应看起来像 HTML。
执行代码:
$wresponse = Invoke-RestMethod -Uri https://**************/wp-json/wc/v3/products/ -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $body -ContentType "application/json" -Method post
执行产品通常添加到数据库后,但响应如下所示(del 标记后的 JSON?):
<head>
<title>Document Moved</title>
</head>
<body>
<h1>Object Moved</h1>This document may be found
<a HREF="https://*************/wp-json/wc/v3/products/1507">here</a>
</body> {"id":1507,"name":"test article","slug":"test-article","permalink":"https:\/\/************\/izdelek\/testni-artikel\/","date_created":"2019-01-29T11:29:15","date_created_gmt":"2019-01-29T10:29:15","date_modified":"2019-01-29T11:29:15","date_modified_gmt":"2019-01-29T10:29:15","type":"simple","status":"publish","featured":false,"catalog_visibility":"visible","description":"bla bla bla","short_description":"bla bla bla","sku":"","price":"10","regular_price":"20","sale_price":"10","date_on_sale_from":null,"date_on_sale_from_gmt":null,"date_on_sale_to":null,"date_on_sale_to_gmt":null,"price_html":"
<del>
<span class=\"woocommerce-Price-amount amount\">
<span class=\"woocommerce-Price-currencySymbol\">€<\/span>20.00<\/span><\/del>
<ins>
<span class=\"woocommerce-Price-amount amount\">
<span class=\"woocommerce-Price-currencySymbol\">€<\/span>10.00<\/span><\/ins>","on_sale":true,"purchasable":true,"total_sales":0,"virtual":false,"downloadable":false,"downloads":[],"download_limit":-1,"download_expiry":-1,"external_url":"","button_text":"","tax_status":"taxable","tax_class":"","manage_stock":false,"stock_quantity":null,"stock_status":"instock","backorders":"no","backorders_allowed":false,"backordered":false,"sold_individually":false,"weight":"812","dimensions":{"length":"100","width":"200","height":"300"},"shipping_required":true,"shipping_taxable":true,"shipping_class":"","shipping_class_id":0,"reviews_allowed":true,"average_rating":"0","rating_count":0,"related_ids":[298,342,229,224,32],"upsell_ids":[],"cross_sell_ids":[],"parent_id":0,"purchase_note":"","categories":[{"id":17,"name":"BABY LINE","slug":"baby-line"}],"tags":[],"images":[],"attributes":[],"default_attributes":[],"variations":[],"grouped_products":[],"menu_order":0,"meta_data":[],"_links":{"self":[{"href":"https:\/\/***************\/wp-json\/wc\/v3\/products\/1507"}],"collection":[{"href":"https:\/\/*******************\/wp-json\/wc\/v3\/products"}]}}
问题可能出在哪里?或者这是正常的,我应该以某种方式从这个响应中提取 JSON?
解决方案
这称为POST/REDIRECT/GET。网站这样做是为了防止从网络浏览器重复提交。这是一个服务器端实现问题,而不是您的 PowerShell 问题(除非 API 文档提到此重定向,在这种情况下,您需要让 PowerShell 处理重定向并遵循它)。
推荐阅读
- excel - 在 Excel VBA 中选择随机名称时排除计数器编号
- django - django 中的静态图像/媒体文件
- swift - Swift 高效地拆分字符串
- javascript - 如何在任何调度操作上运行 redux-saga 中间件?
- java - 由操作员检查通量流
- javascript - 如何在不使用状态 React 的情况下使用 javascript 调用组件
- java - 读取大文件并在 RDBMS 中写入
- python - Python通过beautifulsoup抓取Expedia数据
- netlogo - Netlogo 乌龟跳过特定补丁
- jenkins - 如何在Jenkins中具有相同环境的不同虚拟机(奴隶)上部署不同的作业