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

1. Navtree》》 net .http1

2. Httpclient理论1

2.1. 自动url转向的控制1

3. Java里面的httpclient1

4. C# .net的httpclient2

4.1.1. .NET 4.5(C#):2

4.2. 对COOKIE和SEIION支持区别3

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

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

5. Php的httpclient3

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://www.cnblogs.com/attilax/

 

3. Java里面的httpclient

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

由于问题都出现在Apache Httpclient 4.x上, 因此我们先看看网上是否也有类似的案例场景.
• socket阻塞 
  参考了相关文章, 基本认可博文<<Apache HttpClient 没有设置time out导致应用长时间阻塞的问题>>中的说法: socket没有设置超时选项导致.
  具体解读, 可以理解为服务端对端不回应, 或者因网络异常, 导致socket一直阻塞于读. Apache HttpClient默认设置的socket为SO_TIMEOUT为0, 既无限等待.
  结合之上的代码分析, 确实忽视了超时设定, 陷入了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不具持续性,因此不支持cookie和session,具体说来就是,常见的管理系统中,一般都有登录页和管理页,在登陆页输入用户名和密码,在管理页显示登录页输入的用户名,但是,WebClient实现不了这样的效果,在第一次请求登录页时,验证成功之后,WebClient不会保存http响应报文中的SetCookie,更不会设置下一次http请求报文的Cookie,因此跳转到管理页后,在管理页时接收不到存相应的cookie,因此,webclient更适用于多次请求没有联系的请求,而WebRequest则相反

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

WebClient不支持

WebRequest支持(HttpWebRequest有AllowAutoRedirect属性)

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

WebClient不支持

WebRequest支持(HttpWebRequest有UserAgent属性)

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原理

WebClient和HttpWebRequest区别 - Hello World - 博客频道 - CSDN.NET.html

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

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

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

Atiend

Atitit.http httpclient实践java c# .net php attilax总结的更多相关文章

  1. Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php

    Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php 1. Jdk zip 跟apache ant zip 1 2. Apache Ant包进行ZIP文件压缩,upzip ...

  2. atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php

    atitit.压缩算法 ZLib ,gzip ,zip   最佳实践  java .net php 1. 压缩算法的归类::: 纯算法,带归档算法 1 2. zlib(适合字符串压缩) 1 3. gz ...

  3. atitit.人脸识别的应用场景and使用最佳实践 java .net php

    atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景 1 2. 框架选型 JNI2OpenCV.dll and JavaCV 1 3. Url ap ...

  4. Atitit.嵌入式web 服务器 java android最佳实践

    Atitit.嵌入式web 服务器 java android最佳实践 1. Android4.4.21 2. 自己的webserver1 3. CyberHTTP for Java  cybergar ...

  5. atitit.人脸识别的应用场景and使用最佳实践 java .net php

    atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景1 2. 标准化的api1 3. 框架选型 JNI2OpenCV.dll and JavaCV ...

  6. Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python

    Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python 1. 上传的几点要求2 1.1. 本地预览2 1.2 ...

  7. atitit.ajax 最佳实践跟框架选型 o99

    atitit.ajax 最佳实践跟框架选型 1. 选型框架dwr/dwr3 跟jq 1 2. DWR方便的地方分为两个地方. 1 3. dwr 优点: 1 4. 缺点: 2 5. 根jq的区别 2 1 ...

  8. atitit.报告最佳实践oae 和报告引擎的选择

    atitit.报告最佳实践oae 与报表引擎选型 1. 报表的基本的功能and结构 2 1.1. 查询设计器(配置化,metadata in html) ,anno 2 1.2. 查询引擎 2 1.3 ...

  9. atitit.报表最佳实践oae 与报表引擎选型

    atitit.报表最佳实践oae 与报表引擎选型 1. 报表的主要的功能and结构 2 1.1. 查询设计器(配置化,metadata in html) ,anno 2 1.2. 查询引擎 2 1.3 ...

随机推荐

  1. 《Note --- Unreal --- MemPro (CONTINUE... ...)》

    Mem pro 是一个主要集成内存泄露检测的工具,其具有自身的源码和GUI,在GUI中利用"Launch" button进行加载自己待检测的application,目前支持的平台为 ...

  2. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  3. Linux 桌面系统字体配置要略

    字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.后面几个字是加粗的宋体. ...

  4. 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法

    引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...

  5. Leetcode 笔记 112 - Path Sum

    题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...

  6. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  7. Convert.ToInt32()、int.Parse()和(int)三者的区别

    Convert.ToInt32将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); (int)适合简单数据类型之间的转换: ...

  8. PDO概念 分析 练习

    PDO 翻译过来叫做数据访问抽象层 它是一个数据访问的层面,实际上是一个类,也就是说所有操作数据库的代码,都是通过这个层面完成的 该图好理解大概就是这样一种模式 现在考虑的是能不能使用同一个类,上层代 ...

  9. JavaScript权威设计--JavaScript类型,值,变量(简要学习笔记三)

    1.负号是一元求反运算 如果直接给数字直接量前面添加负号可以得到他们的负值     2.JavaScript中的运算超出了最大能表示的值不会报错,会显示Infinity. 超出最小也不报错,会显示-I ...

  10. 如何重置硬盘遭到“损坏”的Linux系统root用户密码

    传统印象下Linux是非常坚不可摧的,具有千年不更新,万年不重启的美名.而随着虚拟化的推进,很多跑在虚拟化上的Linux由于先前基础架构的脆弱,变得适应性“越来越不好”,体现在IP存储如果出现节点故障 ...