HTTPS C # POST 302 Перемещено - PullRequest
4 голосов
/ 22 июня 2009

Я пытаюсь создать скрипт, который входит на веб-страницу и получает отчет - все работает БОЛЬШОЕ, кроме - я получаю

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: // но потом я получу это возвращенное?

Ответы [ 2 ]

4 голосов
/ 22 июня 2009

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

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

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

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

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

2 голосов
/ 20 июля 2013

Я знаю, этот вопрос старый, но 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.

...