【发布时间】:2016-04-08 23:42:30
【问题描述】:
我一直在尝试构建一个简单的 HTTP 请求,以将 JSON 格式的所有流程数据发布到具有 PowerShell 2.0 的服务器,我需要使用 PowerShell 2.0。不幸的是,每次我在 Windows 7 操作系统上执行我的脚本时,我都会注意到 JSON 有效负载被切断(非常令人沮丧)。请求正文中的实际负载非常大,大约为 74,100 字节。注意到这个请求在 Windows Server 2012 机器上成功运行可能也很有用,尽管我怀疑该特定操作系统的负载请求大小更小。
代码如下:
$request = [System.Net.HttpWebRequest]::Create($endpoint);
$request.ContentType = 'application/json';
$request.Method = 'POST';
$request.Headers.Add('Authorization', "Token " + $authToken);
$seconds = 1000;
$request.Timeout=3*$seconds;
$stringContentBytes = [System.Text.Encoding]::UTF8.GetBytes($stringContent);
$request.ContentLength = $stringContentBytes;
$requestStream = $request.GetRequestStream();
$requestStream.Write($requestContentBytes, 0, $requestContentBytes.length);
$requestStream.Close();
$response = $request.GetResponse();
在此示例中,$endpoint 表示目标服务器端点,$stringContent 表示需要通过网络发送的 JSON 序列化有效负载,authToken 是字符串验证令牌。
我目前将$endpoint 指向一个名为Request Bin 的服务,该服务非常简单地以漂亮、易读的格式详细说明了HTTP 请求信息。所以,我知道我的服务器不会导致负载拆分。
另外,我已经阅读了有关 C# 和 PowerShell 的各种帖子,他们都提到这应该与不关闭流有关。但是,正如您在代码中看到的那样,我非常清楚地执行了$requestStream.Close(),根据我的研究应该能够成功刷新请求流。
有谁知道为什么输出流不会处理所有 JSON 序列化信息?
【问题讨论】:
-
$requestStream.Flush()在.Close()之前怎么样?
标签: json powershell windows-7 powershell-2.0