Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> POST запрос с JSON C# 
V
    Опции темы
Georgich
Дата 28.12.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Приветствую.

Задача такова: на C# реализовать запрос к сайту музру. В FireFox'е я посмотрел какие заголовки он передает в методе POST и что принимает в ответ.

Заголовок запроса:
Код

Host muz.ru
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6
Accept application/json, text/javascript, */*; q=0.01
Accept-Language ru,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Content-Type application/json; charset=utf-8
X-Requested-With XMLHttpRequest
Referer http://muz.ru/Store/FreeStreaming2.aspx?id=T0002390449
Content-Length 18
Cookie <Тут кукисы>
Pragma no-cache
Cache-Control no-cache

В ответ приходит что-то типа того:
Код

{"d":"{\r\n \"Id\": 0,\r\n \"TrackId\": 2390449 ..."}

Но, это все происходит, еще раз повторюсь, в браузере. Пытаюсь воспроизвести запрос в C#, так приходит ошибка 500 от сервера:
Код

                      HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://muz.ru/Services/Player.asmx/GetTrackInfo");
                      request.Method = "POST";
                      request.ContentType = "application/json; charset=utf-8";
                      request.Referer = "http://muz.ru";
                      request.AllowAutoRedirect = false;
       
                      string sQueryString = "{trackId= " + textBox1.Text + "}";
                      byte[] ByteArr = Encoding.ASCII.GetBytes(sQueryString);
                      request.ContentLength = ByteArr.Length;
                      request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
       
                      string html = string.Empty;
       
                      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                      {
                          using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                          {
                              html = myStreamReader.ReadToEnd();
                          }
                      }
       
                      textBox2.Text = html;

Есть подозрение, что я неправильно отсылаю данные, ибо они должны, как я понимаю, быть JSON. Мои данные сервер обрабатывать отказывается и, поэтому, дает 500 ошибку. Подскажите, пожалуйста, как правильно сформировать такой POST-запрос.

Спасибо.

Это сообщение отредактировал(а) Georgich - 28.12.2010, 18:27
PM MAIL   Вверх
Kaerus
Дата 28.12.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WPF'er
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 3.9.2010

Репутация: нет
Всего: 1



Лучше протестируй в Fiddler'e,  к нему есть специальный плагин под JSON ( http://jsonviewer.codeplex.com/ стареньки, но нормально пашет под последним Fiddler'oм)

Добавлено @ 23:33
Для запроса достаточно
Код

Host: muz.ru
Content-Length: 18
Content-Type: application/json; charset=utf-8

Тело
Код

{trackId: 2390449}


Цитата

string sQueryString = "{trackId= " + textBox1.Text + "}";

Не забывай что нужно не trackId= ,а trackId:

P.S.
JSON там какой то левый, плагин его не распознает (первый раз такое встречаю)

Это сообщение отредактировал(а) Kaerus - 28.12.2010, 23:37
PM MAIL ICQ   Вверх
Georgich
Дата 29.12.2010, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Kaerus,  ты маг и волшебник реально. Я ща пойду и нажрусь за твое здоровье. Реально вся трабла заключалась в том, что надо ставить не =, а :.
Все, нафиг, ушел пить нафик. Спасибо тебе большое. Что за фигня. В FF написано, что через = надо, а тут через : канает ^_^
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.