【问题标题】:Write data not flushing for System.Net.HttpWebRequest Stream为 System.Net.HttpWebRequest 流写入数据不刷新
【发布时间】: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


【解决方案1】:

哎呀,我刚刚意识到我正在使用的 Request Bin 服务(实际上)正在限制请求正文!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多