搞Asp.net的朋友,难免会有需要发送一些http请求,网页数据抓取的时候!
有一些安全性相对做得比较好点的站点,某些东西做得相对比较“安全”!!
对于做WINDOWS平台下开发的朋友来说,了解windows原理,一些window的API、
这会大大提示您的编程效率,我个人觉得,用好 Window API 非常的有必要,也是程序员的必备知识
wininet.dll
-----------------------------------------------------------------------------------------
搞C,C++的程序员,不会陌生吧、这个组件概而言之 就是对
internet ,ftp , http 底层做基础封装的编程接口!!!!!!
///
/// 获取Cookie的方法类。
///
public class CookieUtility
{
///url :你请求的站点地址、
///cookieName:cookie名称,获取全部cookie传null、
///cookieData:cookie数据保存对象,数据会保存到这个对象中。
///size:获取到的实际数据大小。
[DllImport("wininet.dll", SetLastError = true)]
public static extern bool InternetGetCookie(string url, string cookieName, StringBuilder cookieData, ref int size);
///url :你请求的站点地址、
///cookieName:cookie名称,获取全部cookie传null、(建议传null)
///cookieData:cookie数据保存对象,数据会保存到这个对象中。
///size:获取到的实际数据大小。
///dwFlags:cookie的标志(位或运算,目前我接触到的只有:
/// (0x00002000,httpreadonly)
/// lpReserved:保留参数对象(有知道的朋友请留言回复下,谢谢!)
[DllImport("wininet.dll", CharSet=CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string url, string cookieName, StringBuilder cookieData, ref int size, int dwFlags, object lpReserved);
[DllImport("Kernel32.dll", SetLastError = true)]
private static extern int GetLastError();
/// 下面这个方法是获取到cookie后,对cookie字符串进行拆分重组的。
public static CookieContainer GetUriCookieContainer(Uri uri)
{
CookieContainer cookies = null;
int datasize = 2048;
StringBuilder cookieData = new StringBuilder(datasize);
if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize))
{
int errCode = GetLastError();
if (datasize < 0)
return null;
cookieData = new StringBuilder(datasize);
if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize))
{
errCode = GetLastError();
return null;
}
}
if (cookieData.Length > 0)
{
cookies = new CookieContainer();
string[] cooks = cookieData.ToString().Split(';');
for (int i = 0; i < cooks.Length; i++)
{
if (cooks[i].IndexOf(',') == -1)
cookies.SetCookies(uri, cooks[i]);
}
}
return cookies;
}
public static string GetCookiesString(CookieContainer cookies, Uri uri)
{
if (cookies == null || uri == null)
return "";
CookieCollection cc = cookies.GetCookies(uri);
string szCookies = "";
foreach (Cookie cook in cc)
{
szCookies = szCookies + cook.Name + "=" + cook.Value + ";";
}
return szCookies;
}
}
文章标题:Asp.nethttp请求获取站点任意Cookie
链接URL:
http://cdweb.net/article/gehjho.html