【问题标题】:https request failing with .Net Framework 2.0 but works with .Net 4.0https 请求在 .Net Framework 2.0 中失败,但在 .Net 4.0 中有效
【发布时间】:2013-06-26 05:49:36
【问题描述】:

我的 asp.net 2.0 应用程序向另一个 URL 发出内部 https 请求,以在响应中获取有效的 cookie。

当我在 .Net 2.0 框架中对此进行测试时,不会返回任何 cookie,但是在 .Net 4 中它确实有效。响应中也不例外,但我的直觉是它与公司代理和 https 有关。除了升级到.Net 4.0(巨大的任务)之外,还有什么建议吗?

        string ticketissuerURL = "https://Securesite";            
        ServicePointManager.Expect100Continue = false;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ticketissuerURL);

        // Set some reasonable limits on resources used by this request
        request.MaximumAutomaticRedirections = 4;
        request.MaximumResponseHeadersLength = 4;
        request.KeepAlive = true;
        request.AllowAutoRedirect = false;
        request.PreAuthenticate = true;

        // Pass in current credentials
        request.UserAgent = "Mozilla/4.0 (Windows)";

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

【问题讨论】:

  • 响应(除了cookies)是否有效?
  • 当您更改框架时,您是在简单地更改应用程序池的目标框架,还是对解决方案本身做一些事情?另外,您介意告诉我们您使用的是哪台服务器吗?
  • 要复制问题,我可以简单地更改项目框架目标版本并在调试中运行。我使用的是 Windows 2008 服务器。
  • 我认为这两个框架之间的请求肯定有一些不同,但由于是 ssl,我无法在环境中使用 Fiddler 进行确认。
  • 你真的需要运行 fiddler 来解决这个问题。您可以为此使用内置于 fiddler 中的 HTTPS 拦截(它基本上会进行中间人“攻击”)。我用过,很简单。

标签: asp.net .net-4.0 proxy .net-2.0 httprequest


【解决方案1】:

我已经检查了您的代码,将 site 作为 cookie 源。在属性 response.Headers 中设置了适用于两个框架的 Cookie。您可以创建 cookie 容器以使它们在 response.Cookies 属性中可见。

request.CookieContainer = new CookieContainer(); 

所以看起来问题出在其他问题上,可能是代理或 .net 4.0 中的实现发生了变化(并且它添加了额外的标头,使其可以在 .net 4.0 上为您的服务工作)。我认为检查真实请求是个好主意。我建议你下载fiddler tool并启用https解密和下一个比较来自两个框架的请求。

记得在代码开头添加这一行

WebProxy proxy = new WebProxy("localhost:8888");

让 fiddler 检查您的请求。

【讨论】:

  • 在本地主机上使用 fiddler 相当棘手。即使您明确重定向,本地主机通常也不会被拦截。万无一失的解决方案是使用面向外部的 IP 地址(在您的局域网上)而不是 locahost 或 127.0.0.1。这会强制流量不使用本地环路网络接口。
猜你喜欢
  • 2011-05-07
  • 2019-09-05
  • 1970-01-01
  • 2012-09-05
  • 2010-10-11
  • 2018-08-04
  • 2014-07-10
  • 2012-11-17
  • 2020-11-03
相关资源
最近更新 更多