ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
private HttpWebResponse GetResponse(string url, string accept, ref CookieContainer container, bool allowRedirect, string referer)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.ServicePoint.Expect100Continue = false;
    request.CookieContainer = container;
    request.Method = WebRequestMethods.Http.Get;
    request.AllowAutoRedirect = allowRedirect;
    request.KeepAlive = true;
    request.UserAgent = "Mozilla / 5.0(Windows NT 10.0; WOW64; Trident / 7.0; rv: 11.0) like Gecko";
    request.Accept = accept;
    request.Referer = referer;
    request.Headers["Accept-Encoding"] = "gzip, deflate";
    try
    {
        return (HttpWebResponse)request.GetResponse();
    }
    catch (WebException e)
    {
        if (e.Response == null)
        {
            throw;
        }
        return (HttpWebResponse)e.Response;
    }
}

有一不受控的外部服务器,证书 CN 不匹配,用 fiddler 进行中间人,证书 CN 与之匹配了,代码能如预期运行。
不使用 fiddler ,在请求 html 的时候能正常获取内容,说明忽略证书错误的代码起作用了,但请求 json 的时候 request.GetResponse()会卡住,debug 时断点在这里,按 F10/F11 就没有后续了。。
不知问题出在何处。。

举报· 515 次点击
登录 注册 站外分享
4 条回复  
ddup 小成 昨天 13:27
我怀疑它可能就是卡,要么你用 post 工具,把请求参数全部搞成一样试试。 要么你 nginx 反代一层,然后你程序访问 nginx ,然后 fiddler 不要中间人代理 https ,代理 nginx 反代出的 http ,看卡不卡。
Damn 楼主 初学 昨天 12:35
@kk2syc @ddup 但是诡异在这个接口从来不卡,fiddler 做中间人的时候能正常返回 json ,继续其它的步骤。 任意时刻 curl 或者用 fiddler 重放都是正常的。
ddup 小成 昨天 01:41
你用 fiddler 抓这个 json 请求,看看是啥状态。
kk2syc 初学 昨天 01:10
你先用 curl 走一遍请求,然后 c#抓包看看有没有请求发出,发出的数据和 curl 对比 请求 json 的时候 request.GetResponse()会卡住,我猜测是服务器没有响应,加上没设置请求超时,所以没有 exception 返回,无限等待响应
返回顶部