Мне нужно войти на сайт и выполнить действие. Веб-сайт основан на REST, поэтому я могу легко войти, выполнив это (информация для входа включена в виде строки запроса в URL, поэтому мне не нужно устанавливать учетные данные):
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest firstRequest = (HttpWebRequest) WebRequest.Create(loginUrl);
firstRequest.CookieContainer = cookieJar;
firstRequest.KeepAlive = true;
firstRequest.Method = "POST";
HttpWebResponse firstResponse = (HttpWebResponse)firstRequest.GetResponse();
Это работает и регистрирует меня. Я получаю cookie для поддержки сеанса, и он сохраняется в cookieJar, показанном выше. Затем я делаю второй запрос, такой как это:
HttpWebRequest secondRequest = (HttpWebRequest) WebRequest.Create(actionUrl);
secondRequest.Method = "POST";
secondRequest.KeepAlive = true;
secondRequest.CookieContainer = cookieJar;
WebResponse secondResponse = secondRequest.GetResponse();
И я гарантирую, что назначу куки для нового запроса. Но по какой-то причине это не работает. Я получаю сообщение об ошибке, в котором говорится, что «время сеанса истекло или истекло», и это делается один за другим, поэтому проблема не связана с синхронизацией.
Я использовал Fiddler для проверки заголовков HTTP, но считаю, что это сложно, поскольку это HTTPS. (Я знаю, что могу расшифровать, но, похоже, не очень хорошо работает.)
Я могу взять свои URL для этой службы отдыха и вставить их в Firefox, и все работает нормально, так что, должно быть, я что-то не так делаю, а не другой конец соединения.
Я не очень знаком с HTTPS. Нужно ли делать что-то еще, чтобы поддерживать мой сеанс? Я думал, что это будет файл cookie, но, может быть, есть что-то еще, что мне нужно поддерживать в двух запросах?
Вот заголовки, возвращаемые при отправке первого запроса (за исключением того, что я изменил cookie для защиты невинных!):
X-DB-Content-length=19
Keep-Alive=timeout=15, max=50
Connection=Keep-Alive
Transfer-Encoding=chunked
Content-Type=text/html; charset=WINDOWS-1252
Date=Mon, 16 Nov 2009 15:26:34 GMT
Set-Cookie:MyCookie stuff goes here
Server=Oracle-Application-Server-10g
Буду признателен за любую помощь, у меня заканчиваются идеи.