如果您对SvnWebClient感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于SvnWebClient的详细内容,并且为您提供关于.netcore下的HttpClient、
如果您对SvnWebClient感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于SvnWebClient的详细内容,并且为您提供关于.net core 下的HttpClient、WebClient性能测试、.NET 中如何选择 WebClient,HttpClient,HttpWebRequest、Android之WebViewClient与WebChromeClient的区别、C# -- WebClient 自动获取 web 页面编码并转换的有价值信息。
本文目录一览:- SvnWebClient
- .net core 下的HttpClient、WebClient性能测试
- .NET 中如何选择 WebClient,HttpClient,HttpWebRequest
- Android之WebViewClient与WebChromeClient的区别
- C# -- WebClient 自动获取 web 页面编码并转换
SvnWebClient
SvnWebClient 介绍
类似于 ViewVC 的WEB 工具
SvnWebClient 官网
http://www.polarion.com/products/alm/index.php
.net core 下的HttpClient、WebClient性能测试
有许多服务需要拉取api接口数据,因此后端开发少不了对Http访问请求进行封装,最主要的应用方式莫过于采用WebClient进行封装,简单易用;而.net core微软官方推荐的是HttpClient和HttpClientFactory,到底哪个性能更加强劲呢?你是否和我一样也存在同样的疑惑?
Post请求代码
不考虑异常的处理,这里的代码量看起来差不多哎~,
使用WebClient代码如下:
//对象 args
var postData = JsonConvert.SerializeObject(args);
var client = new WebClient { };
client.Headers.Add("Content-Type", "application/json");
byte[] responseBytes;
responseBytes = client.UploadData(uri, "POST", Encoding.UTF8.GetBytes(postData));
var responseString = Encoding.GetEncoding("utf-8").GetString(responseBytes);
var response = JsonConvert.DeserializeObject<Tout>(responseString);
使用HttpClient代码如下:
private static HttpClient _client = new HttpClient();
//下面是主要请求
var postData = JsonConvert.SerializeObject(args);
byte[] responseBytes;
using (var content = new StringContent(postData, Encoding.UTF8, "application/json"))
{
var msg = await _client.PostAsync(uri, content);
responseBytes = await msg.Content.ReadAsByteArrayAsync();
}
var responseString = Encoding.GetEncoding("utf-8").GetString(responseBytes);
var response = JsonConvert.DeserializeObject<Tout>(responseString);
性能测试
从上面的代码可以看到一个采用了同步方式请求远程服务器,而HttpClient是采用异步方式请求远程服务器。感觉在处理大并发上,异步方式消耗的线程数量更少,因为我使用的是50并发测试,并没有发现开启的线程数量有差异,均为55个线程(我是在老的api项目上增加的api接口来进行测试的,所以许多线程可能是asp.net core开启的)。
祭出Jmeter,开启50线程的并发测试。
一番测试,剔除预热请求,结果如下:
webclient:
httpclient:
看起来HttpClient有一点点的优势。反复测试几次,有时候webclient也有优势,因此总体上看旗鼓相当。
连接句柄
说好的HttpClient的优势呢?
监控了服务器的cpu和内存,均未发现太多的差异。然而当分析连接数时,忽然发现HttpClient用的连接time_wait数量远远低于WebClient。
# WebClient 使用情况
LISTEN 21
CLOSE_WAIT 13
ESTABLISHED 47
FIN_WAIT2 2
TIME_WAIT 769
# HttpClient 使用情况
LISTEN 21
CLOSE_WAIT 11
ESTABLISHED 48
TIME_WAIT 49
看起来HttpClient共享连接的优化做的还是不错的!
小结
HttpClientFactory在这里没有测试,不过我单独写了个控制台测试了下,其性能略微比HttpClient低一点点,可能是重用消耗了时间,但理论上其内存消耗应该更低。
到底采用WebClient还是HttpClient封装,亲们,自己看着办吧!
本文分享自微信公众号 - dotNET跨平台(opendotnet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
.NET 中如何选择 WebClient,HttpClient,HttpWebRequest
当我们在用 .NET 调用 RestAPI 时通常有三种选择,分别为:WebClient,HttpWebRequest,HttpClient
,这篇文章我们将会讨论如何使用这三种方式去调用 RestAPI,我还会提供相应的代码案例来帮助你更好的理解这三者的概念和使用方式,简单来说:
-
HttpWebRequest
是一种相对底层的处理 Http request/response 的方式。 -
WebClient
提供了对 HttpWebRequest 的高层封装,来简化使用者的调用。 -
HttpClient
是一种新的处理 Http request/response 工具包,具有更高的性能。
接下来我们讨论一下抽象类 WebRequest
。
WebRequest
WebRequest 是一种基于特定的 http 实现,它是一个抽象类,所以在处理 Reqeust 请求时底层会根据传进来的 url 生成相应的子类,如:HttpWebRequest 或 FileWebRequest ,下面的代码展示了如何使用 WebRequest。
WebRequest webRequest = WebRequest.Create(uri);
webRequest.Credentials = CredentialCache.DefaultCredentials;
webRequest.Method ="GET";
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
WebRequest 是 .NET Framework 中第一个用来处理 Http 请求的类,在处理 Http请求和响应
方面给调用者提供了诸多的灵活性,你还可以使用这个类来存取 headers,cookies,protocols 和 timeouts 等等,下面的代码展示了其实现子类 HttpWebRequest 是如何使用的。
HttpWebRequest http = HttpWebRequest)WebRequest.Create(“http://localhost:8900/api/default”);
WebResponse response = http.GetResponse();
MemoryStream memoryStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(memoryStream);
string data = streamReader.ReadToEnd();
WebClient
WebClient 是 HttpWebRequest 的高层封装,它给调用者提供了更便捷的使用方式,理所当然做出的牺牲就是 WebClient 的性能略逊于 HttpWebRequest,如果你的业务场景只是简单访问第三方的 Http Service,那么我建议你使用 WebClient ,同理如果你有更多的精细化配置则使用 HttpWebRequest,下面的代码展示了如何使用 WebClient 。
string data = null;
using (var webClient = new WebClient())
{
data = webClient.DownloadString(url);
}
HttpClient
HttpClient 是在 .NET Framework 4.5 中被引入的,如果你的项目是基于 .NET 4.5 以上版本,除一些特定的原因之外,建议你优先使用 HttpClient,本质上来说,HttpClient 作为后来之物,它吸取了 HttpWebRequest 的灵活性及 WebClient 的便捷性,所以说
Android之WebViewClient与WebChromeClient的区别
ANDROID应用开发的时候可能会用到WEBVIEW这个组件,使用过程中可能会接触到WEBVIEWCLIENT与WEBCHROMECLIENT,那么这两个类到底有什么不同呢?
WebViewClient主要帮助WebView处理各种通知、请求事件的,比如:
onLoadResource
onPageStart 网页开始加载
onPageFinish 网页加载完毕
onReceiveError 接收出错
onReceivedHttpAuthRequest
WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等比如
onCloseWindow(关闭WebView)
onCreateWindow()
onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle
看上去他们有很多不同,实际使用的话,如果你的WebView只是用来处理一些html的页面内容,只用WebViewClient就行了,如果需要更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient。
更多的时候,你可以这样
WebView webView;
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
这样你的WebView理论上就能有大部分需要实现的特色了
当然,有些更精彩的内容还是需要你自己添加的
二、WebViewClient的方法说明
1、
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。
2、
public void onReceivedSslError(WebView view, SslErrorHandler handler,
android.net.http.SslError error) {
handler.proceed();
}
重写此方法可以让webview处理https请求。
3、
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
return super.shouldOverrideKeyEvent(view, event);
}
}
重写此方法才能够处理在浏览器中的按键事件。
4、
public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onLoadResource ");
}
super.onLoadResource(view, url);
}
在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
5、
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onPageStarted ");
}
if (url.endsWith(".apk")) {
download(url);//下载处理
}
super.onPageStarted(view, url, favicon);
}
在页面加载开始时调用。
6、
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onPageFinished ");
}
super.onPageFinished(view, url);
}
在页面加载结束时调用。
C# -- WebClient 自动获取 web 页面编码并转换
C# -- WebClient 自动获取 web 页面编码并转换
抽个时间,写篇小文章,最近有个朋友,用 vb 开发一个工具,遇到 WebClient 获取的内容出现乱码,可惜对 vb 不是很熟悉,看了几分钟 vb 的语法,给他写了个编码转换的拿去用了。
毕竟咱是程序员,必须要有万全之策才可以啊,然后自己思考了一下,用 C# 码下以下代码,有需要的可以参考一下:


1 /// <summary>
2 /// 获取网页内容
3 /// </summary>
4 /// <param name="url">目标url</param>
5 /// <returns>页面内容</returns>
6 public static string GetWebText(string url)
7 {
8 string result = "编码转换失败...";
9 using (WebClient client = new WebClient())
10 {
11 Stream stream = client.OpenRead(url);
12 using (StreamReader reader = new StreamReader(stream, client.Encoding))
13 {
14 string text = reader.ReadToEnd();
15 MatchCollection matchs = Regex.Matches(text, "charset=(.+)");
16 if (matchs.Count > 0)
17 {
18 byte[] data = client.Encoding.GetBytes(text);
19 string charset = matchs[0].Groups[1].ToString().Trim('' '', ''/'', ''>'', ''\r'', ''"'');
20 byte[] conver = Encoding.Convert(client.Encoding, Encoding.GetEncoding(charset), data);
21 result = Encoding.GetEncoding(charset).GetString(data);
22 }
23 }
24 }
25 return result;
26 }
继续惯例:欢迎交流,QQ:1107628852(加备注)
原文出处:https://www.cnblogs.com/ikay/p/10268541.html
今天关于SvnWebClient的介绍到此结束,谢谢您的阅读,有关.net core 下的HttpClient、WebClient性能测试、.NET 中如何选择 WebClient,HttpClient,HttpWebRequest、Android之WebViewClient与WebChromeClient的区别、C# -- WebClient 自动获取 web 页面编码并转换等更多相关知识的信息可以在本站进行查询。
本文标签: