首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

好奇问一下,.net 程序员都用的什么 httphelper ?

  •  
  •   ddgweb · 70 天前 · 2166 次点击
    这是一个创建于 70 天前的主题,其中的信息可能已经有所发展或是发生改变。

    .net 知识还是 3 年前在学校学的,听朋友说.net core 很好,想把以前的一个后端接口升级一下,结果在 linux centos 系统,无缘无故的超时。

    各种办法都试了,怀疑是不是自己的代码太老了,看了一下 httphelper 里面是基于 httpwebrequest,找了一下相关资料,说是对于 https 访问不太友好,尝试了 N 种代码添加的办法,发现还是无济于事。

    转变思路,找一下其他的 httphelper,又找到了 httpclient,可是不好用啊,都是最基础的 url 访问,post、get,我需要用到 PostDataType、Allowautoredirect、postfile,都没有,难不成自己造轮子?

    ps,我吐槽不是说不能造轮子,不是.net 给的东西不够好,而是,什么年代了,每一个.net 都停留在不断的造轮子时间上,还有时间发展吗?

    .net core 你已经是一个成熟的框架了,得要学会自己写代码啊!!!

    第 1 条附言  ·  70 天前
    经过多个小时的代码迁移,经朋友推荐使用了 RestSharp,在 linux centos7 系统下,httpclient,post 访问 https 网站,报错 The SSL connection could not be established, see inner exception. The remote certificate is invalid according to the validation procedure.
    第 2 条附言  ·  70 天前
    经过不懈努力,把错误提升又升级了:An error occurred while sending the request. The server returned an invalid or unrecognized response.
    PS:一模一样的代码,在 windows 环境下没问题,在 linxu centos 有问题。都是 Nginx
    33 回复  |  直到 2019-09-04 12:49:29 +08:00
        1
    MonoLogueChi   70 天前 via Android
    httpclient 用的比较多,这东西越用越感觉不会的东西越多。以前自己造过很多小轮子,比如 gzip 解压之类的,后来发现这些都是已经封装好的。常用的东西大概率不会没有封装,再好好看一下官方文档。另外可以详细说明一下对 https 访问不友好是指哪方面吗,HttpClient 我没有遇到过什么大坑。
    如果你一定要用什么类库,推荐一下 flurl
        2
    arrow8899   70 天前   ♥ 3
        3
    jtwor   70 天前
    是不是发现传个文件 还要拼接表单文本 惊了
        4
    hackfly   70 天前
    。。。。
        5
    ddgweb   70 天前
    @MonoLogueChi httpwebreqest 在 linux 访问 https 的 url,会大概率出现超时的情况,并且是无解
        6
    ddgweb   70 天前
    @jtwor 没这么夸张,我之前用的一个基于 httpwebrequest 封装的 httphelper 很好用,现在想改.net core 用 httpclient,没有什么比较封装好的框架,有点心累,难不成大家都在闭门造轮子吗
        7
    MonoLogueChi   70 天前 via Android
    @ddgweb 我真没发现这个问题。我用的 HttpClient,也是在 Linux 上跑到,Debian9 和 Debian10 都没遇到过 https 超时,.net core 2.2
        8
    ddgweb   70 天前
    @MonoLogueChi 所以,我不想用 httpwberequest,想改用 HTTPclient,但是你知道,httpwebrequest 转 httpclient,很多属性方法都不一样
        9
    xomix   70 天前
    请使用 HttpClient (高并发请使用 HttpClientFactory ),不要再继续使用仅为兼容而迁移的 HttpWebRequest。
    至于轮子的问题,HttpClient 本身封装已经很足够了,没有必要再造轮子了,高并发情况下 HttpClientFactory 不知道多方便。
        10
    xomix   70 天前
    @ddgweb #8 是的,这就是让你换过来的原因之一,毕竟 HttpWebRequest 已经不再更新或变化了,仅仅是作为兼容旧版本的一种存在。
        11
    ddgweb   70 天前
    @xomix 头疼啊,从 httpwebrequest,就没看过内部代码,都是直接用的 httphelper,现在基于 httpclient 的 helper 做的差别太大啊
        12
    xomix   70 天前
    @ddgweb #11 这就不是我能帮你了,我也没法职责你之前设计不够优秀,总之,HttpWebRequest 是在 .net 4.5 之后就不提倡使用的技术了。
        13
    huobazi   70 天前
    看来我用 WebClient 是算刀耕火种了。
        15
    guolaopi   70 天前
    尝试从 HttpWebRequest 迁移到 HttpClient 试试再说,是有一部分属性方法不一样,但是大体上请求那一套东西差不了太多的。
        16
    ddgweb   70 天前
    @guolaopi 是,道理都目标,不过我意思是,为啥.net 大环境,没人把这事做了啊,大家以前应该都是用 httpwebrequest 的啊,难不成现在都是自己写 httpclient 然后每个人造轮子?
        17
    exonuclease   70 天前
    HttpClient
        19
    nannanziyu   70 天前
    MultipartFormDataContent content = new MultipartFormDataContent();
    content.Add(new StreamContent(new System.IO.FileStream("d:/sample.png",FileMode.Open)));
    await new HttpClient().PostAsync("https://www.example.com",content);

    Multipart/form-data 上传文件三行


    var client = new HttpClient(new HttpClientHandler() {AllowAutoRedirect = false});
    Allowautoredirect 开 /关
        20
    nannanziyu   70 天前
    补充一句,楼主你都找到 HttpClient 了
    只要随便 google 下结果就出来了
    然而你都找不到答案,说明寻找并解决问题的能力很欠缺
    而这点是程序员最重要的能力
    如果你是我晚辈亲戚的话,我就劝你改行了
        21
    nannanziyu   70 天前
    HttpWebRequest 也是没有问题的,是你代码的 bug
        22
    WeaPoon   70 天前
    去 NuGet 里随便搜一下都一大堆,例如 2 楼的。
        23
    yulitian888   70 天前
    唔,怎么说呢,谁能相信我今年还能看到.net 1.0/1.1 时代的 StringHelper、FileHelper,以及教学示例那种“学生三层”架构运行在商业项目中。
    谁能信今年一句 System.IO.Directory.Delete("路径", true);就能搞定的事情,还有人非要写上几十行递归。
    所以楼主这个,真不是什么事,太普遍了!
        24
    guolaopi   70 天前
    @ddgweb #16
    我觉得不算造轮子吧。而是 httpClient 本身就几乎达到轮子的级别了。我们顶多封装一下做泛型方法。
        25
    ddgweb   70 天前
    @nannanziyu 感谢你敲了一段代码,我看得懂,也能写的出,之所以从 httpwebrequest 转 httpclient,是因为我目前遇到了一个难题,在 linux centos7 系统下,httpwebrequest 和 httpclient,post 访问 https 网站,都会报错 The SSL connection could not be established, see inner exception. The remote certificate is invalid according to the validation procedure.,所以想找一些成熟的框架,正如 2 楼推荐的 RestSharp,依然如此。
        26
    ddgweb   70 天前
    @yulitian888 我个人觉得 StringHelper、FileHelper 就是一个快捷的好用的实用类,比类库、nuget 便捷高效(方便调试),至于你后半句的调侃,在学生时代大家都是这样过来的,出来写项目肯定会慢慢变好的
        27
    magicdawn   70 天前
    unirest
        28
    guolaopi   70 天前
        29
    ddgweb   70 天前
    @guolaopi 试了,还是一样。
        30
    guolaopi   70 天前
    @ddgweb #29
    那建议使用自己较为熟悉的语言(指你之前项目用的熟练的语言比如 java/python )写个简单的 demo 实现同样的功能,判断下是.NET CORE 的问题还是系统某些配置的问题
        31
    ddgweb   70 天前
    @guolaopi 同样的代码,在 windows 下没问题
        33
    yulitian888   69 天前
    @ddgweb 然而,这样的代码出自于今年,一位 40 多的老程序员之手,说好的提升在哪儿呢?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3619 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 04:06 · PVG 12:06 · LAX 20:06 · JFK 23:06
    ♥ Do have faith in what you're doing.