Wininet InternetGetCookie 获取空的 cookie 数据
本文关键字:cookie 数据 InternetGetCookie 获取 Wininet | 更新日期: 2023-09-27 18:31:27
我目前正在使用 Csharp 获取 cookie 数据。我正在使用DLLImport在wininet.dll中调用InternetGetCookie,但是当我尝试它时,函数返回一个ERROR_INSUFFICIENT_BUFFER(错误代码122)。
任何人都可以帮我吗?
这是 Dll 引用的代码:
[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint="InternetGetCookie")]
public static extern bool InternetGetCookie(string lpszUrl, string lpszCookieName,
ref StringBuilder lpszCookieData, ref int lpdwSize);
这就是我调用函数的方式:
InternetGetCookie("http://example.com", null, ref lpszCookieData, ref size)
谢谢。
返回值告诉您提供给函数的缓冲区不够大,无法包含要返回的数据。您需要调用InternetGetCookie
两次:一次传入大小为 0,以找出缓冲区应该有多大;第二次,使用合适大小的缓冲区。
此外,P/调用签名是错误的; StringBuilder
不应该是ref
参数(并且 EntryPoint
参数是错误的,因为它没有指定正确的入口点名称)。
像这样声明函数:
[DllImport("wininet.dll", SetLastError = true)]
public static extern bool InternetGetCookie(string lpszUrl, string lpszCookieName,
StringBuilder lpszCookieData, ref int lpdwSize);
然后这样称呼它:
// find out how big a buffer is needed
int size = 0;
InternetGetCookie("http://example.com", null, null, ref size);
// create buffer of correct size
StringBuilder lpszCookieData = new StringBuilder(size);
InternetGetCookie("http://example.com", null, lpszCookieData, ref size);
// get cookie
string cookie = lpszCookieData.ToString();