【问题标题】:Changing HTTP Request to HTTPS, message content seems to be lost将 HTTP 请求更改为 HTTPS,消息内容似乎丢失了
【发布时间】:2014-03-03 18:33:39
【问题描述】:

这不是我擅长的主题,所以如果我说一些荒谬的话,我提前道歉。

我使用 Mule 开发了一个 HTTP 服务。当我直接连接到服务并使用我用 C# 编写的测试工具发送数据时,它可以完美运行。

作为我测试的最后一部分,我需要将其发送到一个 HTTPS URL,该 URL 应该“解密”消息并将其转发到我的服务。当我向 HTTPS URL 发送消息时,它会被转发到我的服务,但消息内容显示为空,因此不会得到处理。我知道我可能需要在我的测试工具中添加一些“加密”,但我整天都在研究如何做到这一点,但我发现没有任何东西可以回答我的问题。

这是我用于简单 HTTP 请求的代码示例:

        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(ConfigurationManager.AppSettings["HttpDestination"].ToString());

        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = data.Length;

        using (Stream strm = req.GetRequestStream())
        {
            strm.Write(data, 0, data.Length);
        }

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();

我需要在此处进行哪些更改才能使其正常工作?

【问题讨论】:

  • 我也在添加 HTTP 标头,但这与我看到的问题无关。这是我丢失的消息内容。
  • 好的。写完后忘记使用 strm.Close() 关闭 strm。
  • 不,如果它在“使用”块中,我不需要关闭它。我发布的代码有效。我只是问我需要更改什么才能使用 HTTPS。

标签: c# http https


【解决方案1】:

这是我发现here 的解决方案。我需要添加以下行:

req.ProtocolVersion = System.Net.HttpVersion.Version10;

如果没有这个,在获取请求流时会发生超时,并且永远不会发送内容,只有标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多