Почему этот код, использующий InternetSetCookie для установки файлов cookie на элемент управления WebBroser, не работает? - PullRequest
5 голосов
/ 22 ноября 2011

Я сделал этот пример, чтобы попытаться понять, почему я вообще не отправляю куки с моим WebBrowser, это довольно просто, форма имеет 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");
        }
    }
}

И вот что Фидллер говорит, что я отправляю:

enter image description here

Похоже, что все, кто использует эту функцию, преуспевают, но я не могу заставить ее работать. Я пробовал на разных компьютерах и там тоже не получается. Любая помощь будет отличной, спасибо.

Ответы [ 2 ]

4 голосов
/ 01 апреля 2014

Только что натолкнулся на это сам. Для полноты, вам нужно проверить значение, возвращаемое из InternetSetCookie, и если false, вызвать GetLastError, который дал бы вам код возврата 87 - недопустимый параметр.

т.е.

[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
}
1 голос
/ 23 ноября 2011

Нашел, проблема не в проверке результата операции. www.nonexistent.com не является действительным URI, он должен быть http://www.nonexistent.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...