为什么使用 InternetSetCookie 在 WebBroser 控件上设置 cookie 的代码不起作用?

发布于 2024-12-17 06:59:42 字数 1129 浏览 0 评论 0原文

我完成这个示例是为了尝试理解为什么我根本不使用 WebBrowser 发送 cookie,这很简单,表单上有一个 WebBrowser,仅此而已:

namespace BrowserTest
{
    public partial class Form1 : Form
    {
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool InternetSetCookie(string url, string name, string data);

        public static bool SetWinINETCookieString(string url, string name, string data)
        {
            return Form1.InternetSetCookie(url, name, data);
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // None of two works
            //SetWinINETCookieString("www.nonexistent.com", null, "dataToTest=thisIsTheData");
            SetWinINETCookieString("www.nonexistent.com", "dataToTest", "thisIsTheData");
            this.webBrowser1.Navigate("www.nonexistent.com");
        }
    }
}

这就是 Fiddler 所说的我要发送的内容:

在此处输入图像描述

看起来每个使用此功能的人都成功了,但我一生都无法让它工作。我在不同的电脑上尝试过,但也失败了。任何帮助都会很棒,谢谢。

I've done this sample to try to understand why I'm not sending cookies at all with my WebBrowser, it's pretty simple, the form has a WebBrowser on it, that's all:

namespace BrowserTest
{
    public partial class Form1 : Form
    {
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool InternetSetCookie(string url, string name, string data);

        public static bool SetWinINETCookieString(string url, string name, string data)
        {
            return Form1.InternetSetCookie(url, name, data);
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // None of two works
            //SetWinINETCookieString("www.nonexistent.com", null, "dataToTest=thisIsTheData");
            SetWinINETCookieString("www.nonexistent.com", "dataToTest", "thisIsTheData");
            this.webBrowser1.Navigate("www.nonexistent.com");
        }
    }
}

And that's what Fidller says I'm sending:

enter image description here

Looks like everyone using this function succeeds but for the life of me that I cannot get it working. I've tried at different computers and it fails there too. Any help will be great, thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏了南城 2024-12-24 06:59:43

我自己刚刚遇到过这个问题。为了完整起见,您需要检查从 InternetSetCookie 返回的值,如果为 false,请调用 GetLastError,这会给您返回代码 87 - 无效参数。

IE

[DllImport("kernel32.dll")]
public static extern uint GetLastError();

......

bool ok = SetWinINETCookieString("www.nonexistent.com", "dataToTest", "thisIsTheData");
if (!ok)
{
  int errorCode = GetLastError(); //this will return 87  for www.nonexistent.com
}

Just came across this myself.For completeness, you need to check the value returned from InternetSetCookie and if false, call GetLastError which would have given you a return code of 87 - invalid parameter.

i.e.

[DllImport("kernel32.dll")]
public static extern uint GetLastError();

......

bool ok = SetWinINETCookieString("www.nonexistent.com", "dataToTest", "thisIsTheData");
if (!ok)
{
  int errorCode = GetLastError(); //this will return 87  for www.nonexistent.com
}
梓梦 2024-12-24 06:59:43

我发现了,问题出在没有检查操作结果。 www.nonexistent.com 不是有效的 URI,它必须是 http://www.nonexistent.com

I found it, the problem was not checking the result of the operation. www.nonexistent.com is not a valid URI, it has to be http://www.nonexistent.com

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文