采用阻塞IO模式获取输入数据。每个连接都需要独立的线程,完成数据输入、业务处理、返回。传统阻塞IO模型的问题是,当并发数很大时,就要创建大量线程,占用很大的系统资源。连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read *** 作,造成线程资源浪费。
SpringMVC或Struct等框架都是基于Servlet的,其底层IO模型是阻塞IO模型。Spring社区为了解决SpringMVC的阻塞模型在高并发场景下的性能瓶颈,推出了Spring WebFlux,WebFlux底层实现是久经考验的Netty非阻塞IO通信框架。其实WebClient处理单个HTTP请求的响应时长并不比RestTemplate更快,但是它处理并发的能力更强。 所以响应式非阻塞IO模型的核心意义在于,提高了单位时间内有限资源下的服务请求的并发处理能力,而不是缩短了单个服务请求的响应时长。
uriBuilderFactory:自定义UriBuilderFactory灵活配置使用Url
defaultHeader:为HTTP请求设置Headers请求头
defaultCookie:为HTTP请求设置Cookies
defaultRequest:自定义HttpRequest
filter:为HTTP请求增加客户端过滤器
exchangeStrategies:HTTP读写信息自定义
clientConnector:HTTP客户端连接器设置
使用Mono和Flux接收返回结果,一个Mono对象包含0个或1个元素,而一个Flux对象包含1个或多个元素。
如果要设置也是一样的[code=csharp]//设置Cookie
webBrowser1.Document.Cookie=strcookie[/code]
但是有时候使用这种方法会获取不全,或者是获取不到,下面我提供一个方法
[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
//取当前webBrowser登录后的Cookie值
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved)
//取出Cookie,当登录后才能取
private static string GetCookieString(string url)
{
// Determine the size of the cookie
int datasize = 256
StringBuilder cookieData = new StringBuilder(datasize)
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
{
if (datasize <0)
return null
// Allocate stringbuilder large enough to hold the cookie
cookieData = new StringBuilder(datasize)
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
return null
}
return cookieData.ToString()
}
在很多情况下我们会使用间进程的webBrowser去实现一些网页的请求和抓去,这个时候有部分网页是取不到Cookie的,那怎么办呢?下面我提供一个方法,应该99%的都能取到
使用方法也很简单
[code=csharp]//获取Cookie
string strcookie=GetCookieString(“你要获取Cookie的URl”)[/code]例如
[code=csharp]//获取Cookie
string strcookie=GetCookieString(“http://www.sufeinet.com”)[/code]
这样获取的是sufeinet.com的Cookie信息
webbrowser和ie是共享cookie的,你从ie里登录了之后webbrowser也是登录的,所以实现起来不是很容易,而且多用户登录的话肯定要多个线程,winform是不能多个线程每个线程里持有一个webBrowser的,以前做过多个线程每个线程持有一个WebClient,然后每个WebClient持有自己的cookie欢迎分享,转载请注明来源:内存溢出
评论列表(0条)