Wininet InternetGetCookie获取空cookie数据

时间:2012-04-16 12:56:29

标签: c# cookies wininet dll-reference

我目前正致力于使用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)

感谢。

1 个答案:

答案 0 :(得分:14)

返回值告诉您提供给函数的缓冲区大小不足以包含它想要返回的数据。你需要调用InternetGetCookie两次:一旦传入大小0,找出缓冲区应该有多大;第二次,使用适当大小的缓冲区。

此外,P / Invoke签名错误; 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();