zoukankan      html  css  js  c++  java
  • Atitit.http httpclient实践java c# .net php attilax总结

    Atitit.http httpclient实践java c# .net php attilax总结

     

    1. Navtree》》 net .http1

    2. Httpclient理论1

    2.1. 自动url转向的控制1

    3. Java里面的httpclient1

    4. C# .nethttpclient2

    4.1.1. .NET 4.5(C#):2

    4.2. COOKIE和SEIION支持区别3

    4.3. 用户对是否自动url转向的控制3

    4.4. 对用户代理服务器的支持3

    5. Phphttpclient3

    6. Node.js4

    7. solu解决问题::4

    8. ref参考资料4

    8.1.1. C# 中使用System.Net.Http.HttpClient模拟登录博客园 (GET..._推酷5

     

    1. Navtree》》 net .http

     

    2. Httpclient理论

    要设置timeout,不然有些io api是阻塞性的,导致不能完成。stream.read

    Ssl...

    Useragent,

    Encode:解决编码乱码

    cookie的自动管理

    2.1. 自动url转向的控制

    代理的支持。。。

    复制句柄泄漏 • 句柄泄露(CLOSE_WAIT半连接关闭)

     

    作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

    汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

     

     

    3. Java里面的httpclient

    要用apache httpclient4.5,jdk里面儿的太兰兰...

     

     

    由于问题都出现在Apache Httpclient 4.x, 因此我们先看看网上是否也有类似的案例场景.
    • socket阻塞 
      参考了相关文章, 基本认可博文<<Apache HttpClient 没有设置time out导致应用长时间阻塞的问题>>中的说法socket没有设置超时选项导致.
      具体解读, 可以理解为服务端对端不回应, 或者因网络异常, 导致socket一直阻塞于读. Apache HttpClient默认设置的socketSO_TIMEOUT0, 既无限等待.
      结合之上的代码分析, 确实忽视了超时设定, 陷入了Apache HttpClient隐藏很深的坑中. ^_^!
      解决方案是:为对应的httpclient设置超时即可.

    1

    2

    3

    httpClient = new DefaultHttpClient();

    httpClient.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 2000);

    httpClient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000);

      这样阻塞的问题就可以暂时告一段落了
    • 句柄泄露(CLOSE_WAIT半连接关闭)
      同样参考了博文: <<HttpClient容易忽视的细节——连接关闭>><<HttpClient Close_Wait>>. 
      按apache httpclient的设计理念, http client 处于高并发时, 默认机制导致的CLOSE_WAIT会影响服务的可用性.
      对比之上的代码, 确实没有找到主动关闭连接的代码.
    Apache HttpClient本身变动多, 接口又杂, 以至每个版本的解决方案又有所不同, 有些让人眼花缭乱.
      比较一致的解决方式是,在处理完单个请求后, 调用如下清理代码:

    1

    2

    httpmethod.releaseConnection();

    client.getConnectionManager().shutdown();

      但不管怎么说, Apache HttpClient 4.x的关闭机制, 还是值得大书特书的, 这边显得简略, 希望以后有机会能深入研究.

     

     

    4. C# .net的httpclient

    4.0.1. .NET 4.5(C#):

     System.Net.Http .HttpClient

     

    .net2.0  System.Net.WebClient

    HttpWebRequest  System.Net.HttpWebRequest

     

     

     

     

    4.1. COOKIE和SEIION支持区别

    WebClient不具持续性,因此不支持cookiesession,具体说来就是,常见的管理系统中,一般都有登录页和管理页,在登陆页输入用户名和密码,在管理页显示登录页输入的用户名,但是,WebClient实现不了这样的效果,在第一次请求登录页时,验证成功之后,WebClient不会保存http响应报文中的SetCookie,更不会设置下一次http请求报文的Cookie,因此跳转到管理页后,在管理页时接收不到存相应的cookie,因此,webclient更适用于多次请求没有联系的请求,而WebRequest则相反

    4.2. 用户对是否自动url转向的控制

    WebClient不支持

          WebRequest支持(HttpWebRequestAllowAutoRedirect属性)

    4.3. 对用户代理服务器的支持

        WebClient不支持       

        WebRequest支持(HttpWebRequestUserAgent属性)

     

    WebClient类使用起来比较简单,但是它的功能非常有限,特别是不能使用它提供身份验证证书。,WebClient没有具体的支持。由于WebClient是通用的类,主要用于处理发送请求和接收响应的协议(例如HTTP、FTP等)。它不能处理任一协议的任何附加特性,例如专用于HTTP的cookie。如果想利用这些特性,就需要使用System.Net命名空间中以WebRequest类和

    5. Php的httpclient

    使用curl_

    php里,要想打开网页URL获得网页内容,比较常用的函数是fopen()和file_get_contents()。如

    通过上面两个例子的对比,可以看出使用file_get_contents()打开URL,也许是更多人的选择,因为其比fopen()更简单便捷。

    6. Node.js

    Node.js:使用request模块下载文件

    var request = require('request');

    var stream = fs.createWriteStream(filename);

    request(uri).pipe(stream).on('close', callback);

    7. solu解决问题::

    java.io.EOFException: SSL peer shut down incorrectly

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    javax.net.ssl.SSLKeyException: RSA premaster secret error 

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: 
                  sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid 
                  certification path to requested target 

    Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: KeyUsage does not allow key encipherment

    8. ref参考资料

    Node.js:使用request模块下载文件 - ProgramChangesWorld的专栏 - 博客频道 - CSDN.NET.html

    8.0.1. C# 中使用System.Net.Http.HttpClient模拟登录博客园 (GET..._推酷

    httpclient原理

    WebClientHttpWebRequest区别 - Hello World - 博客频道 - CSDN.NET.html

    fopen()file_get_contents()打开URL获得网页内容的用法区别 - PHP编程_卡卡网.html

    Apache HttpClient使用之阻塞陷阱 - mumuxinfei - 博客园.html

    javahttpclient的一些破事 - wulei_longhe的专栏 - 博客频道 - CSDN.NET.html

     

     

    Atiend

     

     

     

  • 相关阅读:
    Mac 上 Go 语言的安装以及编辑器的配置
    【Go学习】立Flag
    python 使用多线程同时执行多个函数
    python闭包
    mfs环境搭建之元数据服务器(master)节点安装-2
    mfs分布式文件系统介绍-01
    vscode中vim插件对ctrl键的设置
    文本截取{}的内容,生成新数组
    如何过滤a数组中b数组存在的值
    js动态加载js文件
  • 原文地址:https://www.cnblogs.com/attilax/p/15198474.html
Copyright © 2011-2022 走看看