用 C#搓了个小工具,但有个诡异的地方不知如何解决 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Damn
V2EX    问与答

用 C#搓了个小工具,但有个诡异的地方不知如何解决

  •  
  •   Damn 305 天前 1664 次点击
    这是一个创建于 305 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 就没有后续了。。
    不知问题出在何处。。

    11 条回复    2025-01-27 08:10:35 +08:00
    v1
        1
    v1  
       305 天前
    你先用 curl 走一遍请求,然后 c#抓包看看有没有请求发出,发出的数据和 curl 对比

    请求 json 的时候 request.GetResponse()会卡住,我猜测是服务器没有响应,加上没设置请求超时,所以没有 exception 返回,无限等待响应
    ddup
        2
    ddup  
       305 天前
    你用 fiddler 抓这个 json 请求,看看是啥状态。
    Damn
        3
    Damn  
    OP
       305 天前 via iPhone
    @kk2syc
    @ddup 但是诡异在这个接口从来不卡,fiddler 做中间人的时候能正常返回 json ,继续其它的步骤。
    任意时刻 curl 或者用 fiddler 重放都是正常的。
    ddup
        4
    ddup  
       305 天前
    我怀疑它可能就是卡,要么你用 post 工具,把请求参数全部搞成一样试试。

    要么你 nginx 反代一层,然后你程序访问 nginx ,然后 fiddler 不要中间人代理 https ,代理 nginx 反代出的 http ,看卡不卡。
    Damn
        5
    Damn  
    OP
       305 天前
    @ddup 刚才排查了一下,不是接口的问题,但应该也不是系统的问题。
    尝试了一下仅打开 fiddler ,不解密 https ,也能正常运行,但关掉 fiddler 就不行。
    尝试了 request.Proxy = null; 也是不行。
    然后尝试了一下把编译好的 exe 放到刚刚重装的系统里,也会卡住。。。
    td width="auto" valign="top" align="left">
        6
    Damn  
    OP
       305 天前
    @ddup 成了必须要有个 proxy 才能运行了。。
    尝试把 request.ServicePoint.Expect100COntinue= false; 注释掉之后,连 html 都会卡住。。
    实在想不出来这么简单的代码怎么会出现这种现象。。
    Damn
    ddup
        7
    ddup  
       305 天前
    诡异,你要不改成异步试试。。。
    Damn
        8
    Damn  
    OP
       305 天前 via iPhone
    @ddup 异步不行啊,sso 登录,每一步都需要用上一步返回的参数。。
    v1
        9
    v1  
       305 天前
    把 request 和 response 的 header 都打印出,返回空值,先不要 return (HttpWebResponse)request.GetResponse();
    dant
        10
    dant  
       304 天前   1
    WebRequest 会调用 IE 相关组件,建议换成 HttpClient 试试
    Damn
        11
    Damn  
    OP
       303 天前 via iPhone
    @kk2syc
    @dant 确实,换成 HttpClient 就能正常与服务器交互了。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3130 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:31 PVG 19:31 LAX 03:31 JFK 06:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86