Проблемы с параметрами запроса POST в C # - PullRequest
0 голосов
/ 15 июня 2011

Этот веб-сайт использует POST для отправки данных всякий раз, когда пользователь нажимает на календарь для изменения даты.Я использовал Firebug, чтобы осмотреть его.Целевой URL является этим .Данные поста (разделенные пробелами) для конкретного примера: LeagueID=9 GameDate=4-29-2011 Season=2010-2011 Refresh=false LastUpdateTime=01-01-1900 type=Matchups RefreshStartTime=15-5-2011-1308094688683 Week= conferenceID=.

А вот и заголовки:

Host    scores.covers.com
User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Referer http://scores.covers.com/basketball-scores-matchups.aspx
Content-Length  169
Content-Type    text/plain; charset=UTF-8
Cookie  __loooooooooongCookieString

Я бы хотел сделать этот запрос POST, используя WebRequest (или еще, когда это нужно).Вот моя попытка:

        string parameters = "LeagueID=\"9\"&GameDate=\"4-29-2011\"&Season=\"2010-2011\"&Refresh=\"false\"&LastUpdateTime=\"01-01-1900\"&type=\"Matchups\"&RefreshStartTime=\"15-5-2011-1308094688683\"&Week=&conferenceID=";
        byte[] bytes = Encoding.ASCII.GetBytes(parameters);

        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://scores.covers.com/ajax/SportsDirect.Controls.LiveScoresControls.Scoreboard,SportsDirect.Controls.LiveScoresControls.ashx?_method=UpdateScoreboard&_session=no");


        req.Method = "POST";
        req.ContentLength = bytes.Length;
        req.ContentType = "text/plain; charset=UTF-8";
        Console.WriteLine(req.ContentLength); // 175

        Stream reqStream = req.GetRequestStream();
        reqStream.Write(bytes, 0, bytes.Length);
        reqStream.Close();

        WebResponse resp = req.GetResponse();
        Console.WriteLine(((HttpWebResponse)resp).StatusDescription); // OK

        Stream respStream = resp.GetResponseStream();
        StreamReader reader = new StreamReader(respStream);
        Console.WriteLine(reader.ReadToEnd());
        resp.Close();

Но это не работает.Код ответа в порядке, но сам ответ таков:

new Object();r.error = new ajax_error('System.FormatException','Input string was
 not in a correct format.\r\nCould not retreive parameters from HTTP request.',0
)new Object();r.error = new ajax_error('System.ArgumentException','Object of typ
e \'System.DBNull\' cannot be converted to type \'System.Int32\'.',0)

В чем дело?Я вижу, что с параметрами что-то не так, поскольку длина содержимого запроса составляет 175 (в отличие от 169 из запроса Firefox).

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Почему бы не использовать NameValueCollection для POST ваших параметров, используя WebClient ?Это делает сложные вещи для вас.Код внизу связанной страницы примерно такой же простой, как и выглядит.В отличие от примера, вам, вероятно, следует задуматься об утилизации WebClient.

1 голос
/ 15 июня 2011

Не кодировать ASCII, когда вы задаете UTF-8 позже. Убедитесь, что URL-адрес кодирует параметры. Попробуйте изменить тип содержимого на «x-www-form-urlencoded».

...