Как использовать HttpWebRequest для входа на сайт? - PullRequest
1 голос
/ 31 января 2011

Я пытаюсь переписать некоторый php-код сервера, который регистрируется на веб-сайте, используя каноническое использование HttpWebRequest, найденное по всей сети на сайтах C #:

HttpWebRequest BuildPOST(string url, string parameters)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    byte[] bytes = Encoding.ASCII.GetBytes(parameters);
    Stream os = null;
    try
    { 
         request.ContentType = "application/x-www-form-urlencoded";
         equest.ContentLength = bytes.Length;
         os = request.GetRequestStream();
         os.Write(bytes, 0, bytes.Length); 
    }
    catch (WebException ex)
    {
         Console.WriteLine("{0} HttpPost: Request error", ex.Message);
    }
    finally
    {
         if (os != null)
         {
              os.Close();
         }
    }
    return request;
}

, вызываемое с помощью:

string login_url = "http://www.sailonline.org/community/accounts/login/";
string login_post_data = "next=/windy/run/{0}/&password={1}&username={2}";  // race, pwd, boat
HttpWebRequest req = BuildPOST(login_url, string.Format(login_post_data, race, pwd, user));

Исходный php:

include 'phplib.php';

$url = "http://www.sailonline.org/community/accounts/login/";
$postdata = sprintf("next=/windy/run/%s/&password=%s&username=%s", $race, $key, $boat);
$html = get_pipe_output(build_post_url($url, $postdata));

Однако код C # не генерирует такой же ответ от сервера, как код php.Вместо этого я получаю страницу с просьбой ввести данные для входа (которые были правильно введены в посте для начала).

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

1 Ответ

1 голос
/ 01 февраля 2011

Вам необходимо создать и установить CookieContainer по запросу.Без этого ваш запрос не будет успешным.Похоже, страница отправляет куки с ответом.

HTTP/1.1 200 OK
Date: Mon, 31 Jan 2011 23:53:23 GMT
Server: Apache
Expires: Mon, 31 Jan 2011 23:53:23 GMT
Vary: Cookie
Last-Modified: Mon, 31 Jan 2011 23:53:23 GMT
ETag: "ad806aa693ed8187c278f0fadfa92d01"
Cache-Control: max-age=0
Content-Type: text/html; charset=utf-8
Set-Cookie:  sailonlinesid=bcc2b5fe9980df3e741e8fe7279d61d4; Domain=.sailonline.org; expires=Mon, 14-Feb-2011 23:53:23 GMT; Max-Age=1209600; Path=/
Connection: close
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...