Atitit.http httpclient实践java c# .net php attilax总结
来源:互联网 发布:中国2016的耽美网络剧 编辑:程序博客网 时间:2024/06/10 08:53
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://blog.csdn.net/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总结
- Atitit.注解解析(1)---------词法分析 attilax总结 java .net
- Atitit 管理原理与实践attilax总结
- atitit.http原理与概论attilax总结
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
- Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持
- Atitit.java图片图像处理attilax总结
- Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php
- Atitit. 异常的使用总结最佳实践java .net php Vo8f
- atitit.泛型编程总结最佳实践 vO99 java c++ c#.net php
- Atitit.二维码功能的设计实践 attilax 总结
- Atitit.ide技术原理与实践attilax总结
- Atitit.异步编程技术原理与实践attilax总结
- Atitit.log日志技术的最佳实践attilax总结
- Atitit 词法分析器的设计最佳实践说明attilax总结
- Atitit.java c#这类编程语言的设计失败点attilax总结
- Atitit.注解and属性解析(2)---------语法分析 生成AST attilax总结 java .net
- Atitit.request http乱码的设计防止 检测与解决最近实践p825 attilax总结.doc
- Python基础(七)——类、对象
- css float(1)
- Linux - C数据库编程(预习内容三)
- 运算符优先级
- 常用的win命令行命令
- Atitit.http httpclient实践java c# .net php attilax总结
- Dreamweaver页面属性设置
- 1
- CSS学习笔记-导入CSS的几种方法(三)
- objective-c中的属性定义及getter / setter方法
- 2
- Linux下打开.doc,.pdf的方式
- 3
- 今日头条2017秋季校招在线编程题解法参考