- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试 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 值)。
最佳答案
为了汇集评论中的所有信息,有几个选项,具体取决于您的服务器接受的内容类型。
内容类型:应用程序/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
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 编码的,但这可能不是您的服务器所期望的。
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/
我正在查看 WebRequest.Create 之间的文档和 WebRequest.CreateHttp来决定我应该在我的应用程序中使用哪个。我没有看到这两种方法之间有什么不同,除了 WebReque
我想知道 DefaultWebProxy 和 GetSystemWebProxy() 之间的主要区别是什么。 MSDN 上有一些描述,但我仍然觉得我需要更多细节才能更好地理解。 此外,假设我在 C#
我想在 UI 上显示下载正在进行时下载文件。使用 WebRequest 我有两个选择: 使用 WebRequest.BeginGetResponse 和相关方法。 优点:可以以字节为单位显示准确的进度
我正在尝试注销对 MonoTouch 库的引用,所使用的是: IWebProxy oDefaultProxy = CFNetwork.GetDefaultProxy (); 在 .NET 中,还有
我首先发布了这个:HttpWebRequest: How to find a postal code at Canada Post through a WebRequest with x-www-fo
在 Windows PowerShell 3.0 中引入了 Invoke-RestMethod小命令。 Invoke-RestMethod cmdlet 接受 -Body用于设置请求正文的参数。 由于
我正在尝试在.bat文件中下载一个exe,但是无法隐藏输出 $progressPreference = 'silentlyContinue'| Out-Null 和$null 2>&1. 我不知道为什
我正在尝试 curl 包含分号的有效负载,但它失败了 Invoke-WebRequest -Uri $uri -Body '{"text" : "foo;"}' -Method Post Invoke
我有一个带有状态页面的网络设备,该页面可以通过Java小程序访问。使用Fiddler,我可以找到状态的http提要,但是页面会不断刷新。 (Firefox会显示该页面,但会保持刷新状态,Chrome会
有人可以向我解释为什么cUrl(真正的网址)有效但Invoke-WebRequest无效吗?同一台机器,相同变量。在我看来,他们俩都应该做同样的事情,将文件上传到jfrog Artifactory。
我正在尝试在 WebRequest 中发送表单数据。 该函数工作正常并按预期返回“成功”响应流。 但是,如果“data”变量的长度超过 30,000 个字符,我会遇到 HTTP 500 错误: Mes
我正在尝试在 WebRequest 中发送表单数据。 该函数工作正常并按预期返回“成功”响应流。 但是,如果“data”变量的长度超过 30,000 个字符,我会遇到 HTTP 500 错误: Mes
下面的代码需要怎么修改才能发送WebRequest通过指定的 proxy server和 port number ? Dim Request As HttpWebRequest = WebReques
我想执行一堆 WebRequest,但设置了可以同时启动的阈值。 我遇到了这个LimitedConcurrencyTaskScheduler example并尝试像这样使用它 scheduler =
我使用下面的代码在线检查一些pdf文件并相应地返回一个字符串。 问题是:当我添加第二个 Task.Factory.StartNew() 时,它开始复制所有请求,但仍然只返回一个答案(应该如此)。 我需
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(baseurl + url); req.Timeout = 1000 * 10;
我正在使用 WebRequest 执行简单请求,应用程序只是挂起,直到响应返回。我该如何解决这个问题? 看了很多题目,都说要用线程。我不知道如何使用它们;任何人都可以提供以下不挂起用户界面的示例吗?
以下代码在 WinForms 和 Windows Phone 8 应用程序中返回错误。 代码 var jsonData = "jsonStringGoesHere"; var uri
我正在用 C# 构建一个网络抓取工具,用于处理代理和大量请求。页面通过 ConnectionManager 类加载,该类获取代理并使用随机代理重试加载该页面,直到页面被正确加载。 平均一个任务需要10
我在做一个项目,多次调用一个网址 request = (HttpWebRequest)WebRequest.Create(url); request.GetResponse(); 这是我的代码。
我是一名优秀的程序员,十分优秀!