1

这不是我第一次使用这种方法发送 POST 请求,而且我从来没有遇到任何问题:

    public static Stream SendPostRequest(Uri uri, byte[] postData)
    {
        var request = WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postData.Length;
        Stream requestStream = request.GetRequestStream();
        requestStream.Write(postData, 0, postData.Length);
        requestStream.Close();
        return request.GetResponse().GetResponseStream();
    }

在 request.GetRequestStream() 我收到 System.Net.WebException:底层连接已关闭:发送时发生意外错误。
更有趣的是,它在某些机器上运行良好,但不能在我的机器(Windows 7 Beta)和生产服务器(Windows Server 2008)上运行。更多信息:

工作 - Windows Xp - .NET 2.0
工作 - Windows Xp - .NET 3.5
工作 - Windows Server 2003 - .NET 3.0
不起作用 - Windows Vista - .NET 3.5
不起作用 - Windows Server 2008 - .NET 3.5
不起作用t 工作 - Windows 7 测试版 - .NET 3.5 SP1

试过:

  • 一堆东​​西从这里,没有任何帮助。
  • 使用WebClient,没有任何改变。
  • 调整这些选项,但没有发现任何显着差异。
  • 试过WireShark。一个非常好的工具。

[解决了。有点]
我忘了提,但 Uri 是 https ......我尝试了 http 并且它有效。不敢相信,我没有早点尝试……
不过,如果有人能对整个情况有所了解,我将不胜感激。

4

3 回答 3

1

我的第一个攻击计划是使用WireShark来查看每种情况下网络级别发生的情况。查看每台机器发送的内容。

此外,您注意到操作系统之间的差异,但它们是否都安装了完全相同版本的 .NET(下至 SP)?

于 2009-03-09T09:24:01.480 回答
1

GET 有效吗?也许这是一个代理配置问题(proxycfg等)。

另外 - 为了简化事情(减少未知数),考虑使用WebClient来做帖子:

using (WebClient client = new WebClient())
{
    client.Headers.Add("content-type","application/x-www-form-urlencoded");
    client.UploadData(address, data);
    // or more simply
    client.UploadValues(address, nameValuePairs);
}
于 2009-03-09T09:33:15.357 回答
0

尝试调整以下一个或多个选项:

  • 发送卡住
  • 允许自动重定向
  • 传输编码

还要尝试注意它们与您的各种配置之间的差异。

于 2009-03-09T12:29:26.260 回答