gpt4 book ai didi

powershell - 使用十六进制值调用 WebRequest

转载 作者:行者123 更新时间:2023-12-03 01:25:23 26 4
gpt4 key购买 nike

我正在尝试 curl 包含分号的有效负载,但它失败了

Invoke-WebRequest -Uri $uri -Body '{"text" : "foo;"}' -Method Post

Invoke-WebRequest: {"id":"model.incoming_hook.parse_data.app_error","message":"Unable to parse incoming data","detailed_error":"","request_id":"3papdgjsni87untfo7e3rsogpy","status_code":400}
Invoke-WebRequest -Uri $uri -Body '{"text" : "foo"}' -Method Post
工作正常。我已将分号转换为 %3B,这似乎发布为 ;。我的问题是它将所有 %2F 字符串转换为斜杠 - 然后中断(出于某种原因,它需要是文字 2F 值)。
当使用 curl 命令或在 python 中它很好,所以它不是好像端点不接受 ';'值(value)。我尝试过单引号、双引号、convertto-json、斜杠等,但似乎没有任何效果。

最佳答案

为了汇集评论中的所有信息,有几个选项,具体取决于您的服务器接受的内容类型。
内容类型:应用程序/json
如果接受 Content-Type: application/json您可以在评论中使用@Jeroen Mostert 的回答:

# raw text in a hashtable
$data = @{ "text" = "foo;%2F" };

# convert to json
$json = ConvertTo-Json -InputObject $data -Compress;

# post as 'application/json'
Invoke-WebRequest -Uri "http://example.org" -Body $json -Method "POST" -ContentType "application/json";
这将发送以下 HTTP 请求:
POST http://example.org/ HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-GB) WindowsPowerShell/5.1.19041.1
Content-Type: application/json
Host: example.org
Content-Length: 18
Connection: Keep-Alive

{"text":"foo;%2F"}
内容类型:应用程序/x-www-form-urlencoded
默认情况下,PowerShell 将使用 Content-Type: application/x-www-form-urlencoded 发布数据,因此您可以按如下方式发送文本:
# raw text in a hashtable
$data = @{ "text" = "foo;%2F" };

# convert to json
$json = ConvertTo-Json -InputObject $data -Compress;

# url-encode
$body = [System.Net.WebUtility]::UrlEncode($json);

# post as 'application/x-www-form-urlencoded'
Invoke-WebRequest -Uri "http://example.org" -Body $body -Method "POST";
这将发送以下 HTTP 请求:
POST http://example.org/ HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-GB) WindowsPowerShell/5.1.19041.1
Content-Type: application/x-www-form-urlencoded
Host: example.org
Content-Length: 36
Connection: Keep-Alive

%7B%22text%22%3A%22foo%3B%252F%22%7D
注意 - 完整的 json 文本是 url 编码的,但这可能不是您的服务器所期望的。
自定义编码
如果由于某种原因您的服务器需要原始 json 语法,但是 text 的内容属性需要进行 url 编码,您可以像这样进行一些自定义编码:
# raw text in a hashtable
$data = @{
"text" = "foo;%2F"
};

# url-encode the text
$data.text = [System.Net.WebUtility]::UrlEncode($data.text);

# convert to json
$json = ConvertTo-Json -InputObject $data -Compress;

# post as 'application/x-www-form-urlencoded'
Invoke-WebRequest -Uri "http://example.org" -Body $json -Method "POST";
这将生成 HTTP 请求:
POST http://example.org/ HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-GB) WindowsPowerShell/5.1.19041.1
Content-Type: application/x-www-form-urlencoded
Host: example.org
Content-Length: 22
Connection: Keep-Alive

{"text":"foo%3B%252F"}
希望其中之一对您有用。如果没有,上面应该有足够的片段来将一些东西放在一起:-)。

关于powershell - 使用十六进制值调用 WebRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63737487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com