2009-06-22 2 views
4

Я пытаюсь создать сценарий, который Логины на веб-страницу и захватывает доклад - все работает прекрасно, за исключением - я получаюHTTPS C# POST 302 Moved

HTTP/1.1 302 MovedTemporarily 
Date: Mon, 22 Jun 2009 13:22:04 GMT 
Server: Server 
x-some-id-1: 0J3X3VBBCGNJG9V46G5D 
x-some-id-2: BtQ4SsDhbryWgiVNFcVpMbt898GuPIBaWuGwAWjvsyI= 
Set-cookie: session-id-time=1246258800l; path=/; domain=.example.com; expires=Mon Jun 29 07:00:00 2009 GMT 
Set-cookie: session-id=179-5933843-4704124; path=/; domain=. example.com; expires=Mon Jun 29 07:00:00 2009 GMT 
Location: https://example.com 
Vary: Accept-Encoding,User-Agent 
nnCoection: close 
Content-Type: text/html; charset=UTF-8 
Content-Length: 0 

ответ и я не знаю, как остановить его. Я пробовал настройки

httpwebrequest.allowautoredirect как «True», так и «False» и ничего не помогает.

Он пытается сумасшедший, так как я могу войти на сайт через https: //, но потом я возвращаю его?

ответ

4

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

http://www.byteblocks.com/page/How-to-submit-requests-to-web-sites-programatically-using-HttpWebRequest.aspx

Ключевой вопрос заключается в том, что вы не можете использовать HttpWebRequest с включенным, чтобы сделать процесс входа в систему с участием 302s и печенье, потому что куки не приготовьтесь до конца всего процесса автоматической переадресацией.

Решение состоит в том, чтобы отключить автоматическую переадресацию и выполнить весь процесс входа вручную поэтапно (получить заголовок «Location» из 302 ответов перенаправления, а также заголовок «Set-cookie» и переходите к следующим шагам по мере необходимости).

Ваш контейнер для печенья должен захватить все куки по пути и отправить их в конце. Если вы получаете 302 - вы будете ударять головой о стену, задаваясь вопросом, почему вы продолжаете заканчиваться на странице входа.

2

Я знаю, что вопрос старый, но Google очки здесь. Итак, вот еще одно решение для WebClient.

public class CookieAwareWebClient : WebClient 
{ 
    private CookieContainer cookie = new CookieContainer(); 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 
     if (request is HttpWebRequest) 
     { 
      (request as HttpWebRequest).CookieContainer = cookie; 
      (request as HttpWebRequest).UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1300.0 Iron/23.0.1300.0 Safari/537.11"; 
     } 
     return request; 
    } 
} 

Затем создайте WebClient объект CookieAwareWebClient wc = new CookieAwareWebClient(); и делать все, что Вам нужно.

Редактировать: работает через HTTP и HTTPS.

Смежные вопросы