Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# .NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Crag Hack
3 / 3 / 1
Регистрация: 05.05.2013
Сообщений: 42
#1

Отправить post запрос на JSON - C#

28.02.2014, 13:23. Просмотров 3549. Ответов 5
Метки нет (Все метки)

Всем привет , использую WebBrowser что бы отправлять пост запросы , и для сайта realty.mail.ru нужно отправить сюда --- http://pro.realty.mail.ru/add/jsonSave/ (так показывай сниффер) , но при попытке из программы передать данные на этот адрес , предлагает скачать файл JSON
вот код
C#
1
2
3
4
5
webBrowser1.Navigate("http://pro.realty.mail.ru/addblock/");
            String postData = "block_uid=&last_version=&created_at=&payer_id=5006502&bargain_type=sale&type_id=9&client_id=5006691&price_origin=1111111111&currency=RUR&unit_type=total&description=http%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2Fhttp%3A%2F%2Fpro.realty.mail.ru%2Fadd%2FjsonSave%2F%D0%BC&classificators%5Brooms_count%5D%5Bvalue%5D=5&classificators%5Bcommon_area%5D%5Bvalue%5D=66&classificators%5Bkitchen_area%5D%5Bvalue%5D=22&classificators%5Bliving_area%5D%5Bvalue%5D=44&classificators%5Bfloor%5D%5Bvalue%5D=5&classificators%5Bfloors_count%5D%5Bvalue%5D=12&classificators%5Brenovation%5D%5Bvalue_id%5D=0&classificators%5Bflat_type%5D%5Bvalue_id%5D=0&classificators%5Bbathroom_type%5D%5Bvalue_id%5D=0&classificators%5Brooms_area%5D%5Bvalue%5D=&classificators%5Bhouse_type%5D%5Bvalue_id%5D=0&classificators%5Bbuilding_year%5D%5Bvalue%5D=&classificators%5Bname%5D%5Bvalue%5D=&classificators%5Bbuilding_serial%5D%5Bvalue%5D=&classificators%5Bceil_height%5D%5Bvalue%5D=&latitude=53.889947&longitude=27.573334&object_id%5B%5D=1111374&object_id%5B%5D=1111375&geo_relations%5Bsubway%5D%5Bobject_id%5D=0&geo_relations%5Bsubway%5D%5Bvalue%5D=&geo_relations%5Bsubway%5D%5Brelation_type_id%5D=4&raw_address=%D0%B7%D0%B0%D1%81%D0%BB%D0%B0%D0%B2%D1%81%D0%BA%D0%B0%D1%8F+25&company_name=Vlad+Shelepkov&contact_phone-country=1111374&contact_phone=%2B375+(29)+752-86-77&contact_email=crag.hack%40mail.ru&external_url=&is_agreed=1";
            byte[] Bytes = Encoding.UTF8.GetBytes(postData);
            string AdditionalHeaders = "Content-Type: application/x-www-form-urlencoded" + Environment.NewLine;
            webBrowser1.Navigate("http://pro.realty.mail.ru/add/jsonSave/", "", Bytes, AdditionalHeaders);
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2014, 13:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Отправить post запрос на JSON (C#):

Не получается отправить Post запрос - C#
Есть сайт когда туда заходишь надо указать что тебе больше 18 и т.д. Хочу программно это сделать. Вот что просниффил: POST...

Отправить Post-запрос средствами XNet - C#
Доброго суток всем. Проблема с отправлением post-запроса, средствами xNet. Нужно отправить заполненную форму, в формате: ...

Отправить POST-запрос через Awesomium - C#
Здравствуйте, господа! Нужен пример отправки post запроса через Awesomium, например, по нажатию кнопки. Есть url, на который нужно...

Как отправить файл через POST-запрос - C#
как отправить файл через POST запрос?

.NET 4.x Как отправить правильный POST запрос с помощью xNet? - C#
Здравствуйте, столкнулся с проблемой которую решить еще не получилось, да и не встречал решений для xNet. Я использую библиотеку xNet для...

Как отправить POST запрос и проверить правильные ли данные - C#
Добрый день! Мне необходимо посылать POST запрос на страницу "http://IP/login.php". Прослушал сниффером. В запросе передаются такие...

5
Psilon
Master of Orion
Эксперт .NET
5932 / 4831 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
01.03.2014, 11:32 #2
Crag Hack, ну так используйте для пост запросов класс httpWebRequest с методом POST... Как и для GET...
1
Crag Hack
3 / 3 / 1
Регистрация: 05.05.2013
Сообщений: 42
03.03.2014, 22:08  [ТС] #3
Спасибо за ответ , но не будет результат такой же? насколько я понимаю что бы запостить нужно будет еще передавать куки (для авторизации ) , поэтому я решил по простому сделать через веббраузер , который сам хранит куки , сделал несколько сайтов но маил ру не получается, расшифровывал содержимое , вот что он передает "{"status":false,"reason":{"login":"Не указаны логин\/пароль для входа в Личный кабинет"}}"
0
Psilon
Master of Orion
Эксперт .NET
5932 / 4831 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
03.03.2014, 23:42 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Crag Hack, куки надо хранить, есть пример на powershell, чуть позже мб скину, если доступ будет)
1
Crag Hack
3 / 3 / 1
Регистрация: 05.05.2013
Сообщений: 42
03.03.2014, 23:57  [ТС] #5
Не надо спасибо , попробую доделать первую версию уже на браузере (не много осталось) , потом буду переделывать на httpWebRequest , у меня получилось отправить данные только все равно присылается этот json файл (я понимаю что если бы я делал нормально через httpWebRequest то такого бы не случилось) но может можно как-либо отправить пост запрос и не принимать данные , или же запретить скачивание файлов ?

Добавлено через 12 минут
Пока придумал только
C#
1
2
3
4
5
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
            timer1.Start();

в таймере
C#
1
2
SendKeys.Send("{ENTER}");
            timer1.Stop();
т.е. по прошествию 0.1 секунды нажимает интер , и убирает это сообщение , конечно это не выход , да и работает он 1 раз если повторно нажать то не нажимается интер почему-то
0
Psilon
Master of Orion
Эксперт .NET
5932 / 4831 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
04.03.2014, 18:14 #6
Crag Hack, в общем, когда вы посылаете первый GET-запрос (логинитесь или просто заходите на домашнюю страницу), то вам выдается пакет куков (в моем случае, это были куки с айдишником сессии JSESSIONID), этот пакет вы затем должны использовать на протяжении всех последующих запросов. Пример есть, но смогу показать только завтра, если не забуду.

Добавлено через 17 часов 17 минут
Забыл..

Добавлено через 4 минуты
С другой стороны, RDP спасет мир.

Вот так у меня выглядит функция, которая принимает 3 параметра: урл, куки-контейнер и post-data (если запрос - POST). Возвращает же она строку ответа:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
function GetRequest([string] $url, [System.Net.CookieContainer] $cookieContainer, [string] $postParams, [string] $userAgent)
{
        [system.Net.HttpWebRequest] $request = [system.Net.HttpWebRequest]::Create($url)
        $request.CookieContainer = $cookieContainer
        $request.UserAgent = $userAgent
        
        if (![string]::IsNullOrEmpty($postParams))
        {
            $request.Method = "POST"
            $request.ContentType = "application/x-www-form-urlencoded"
            $request.ContentLength = $postParams.Length
            [System.IO.TextWriter] $requestWriter = New-Object System.IO.StreamWriter($request.GetrequestStream())
            $requestWriter.Write($postParams)
            $requestWriter.Close()
            $requestWriter.Dispose();
        }
        
        return [system.Net.HttpWebRequest] $request
}
 
function GetContentFromUrl([System.String] $url, [System.Net.CookieContainer] $cookieContainer, [System.String] $postParams, [string] $userAgent)
{
        try
        {
            $request = GetRequest $url $cookieContainer $postParams $userAgent
            $Response = $request.GetResponse()
 
            [System.IO.TextReader] $contentStream = New-Object System.IO.StreamReader($Response.GetResponseStream())
            $content = [System.Web.HttpUtility]::HtmlDecode($contentStream.ReadToEnd())
            $contentStream.Close()
            $Response.Close()
 
            if($Response.StatusCode -ne 200)
            {
                throw 'non-200 status code'
            }
        
            if ($content.Contains('Забыли пароль?'))
            {
                throw 'Неверные логин-пароль'
            }
            
            return $content
        }
        catch [System.Net.WebException]
        {
            try
            {
                #       Write-Host $Error[0] -foregroundcolor "magenta"
                $exception = $_.Exception 
                $status = GetStatusDescription( $exception.Status)
                
                $Error = GetExceptionDetails( $exception)
                $errorInfo = GetErrorInfo($exception)
                $errorDescription = GetErrorDescription($exception)
                
                $responseText = GetFailedResponseText -exception ($exception)
                
                if($exception.Response -ne $null)
                {
                    $exception.Response.Close()
                }
            
                SetResult -result $false -info $errorInfo -properties (GetAdditionalProperties -pingUrl $url -responseUri $exception.Response.ResponseUri -httpResponseStatusCode ($exception.Response.StatusCode) -errorCode ($ErrorCode.WebError) -errorDescription $errorDescription -responseText ($responseText))            
                Exit
            }
            catch [System.Exception]
            {
                [System.String] $resultText = "При получении ответа произошла ошибка :{0} {1} {2} " -f ($status, $exception, $exception.GetType())
                SetResult -result $false -info $errorInfo -properties (GetAdditionalProperties -pingUrl $url -resultCount 0 -errorDescription $errorDescription -httpResponseStatusCode 0) 
                Exit
            }
        }     
}
1
04.03.2014, 18:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2014, 18:14
Привет! Вот еще темы с ответами:

Отправить на сервер сначала GET-запрос, а затем POST, не закрывая соединения - C#
Доброго времени суток! Подскажите, как можно отправить на сервер сначала get-запрос, а затем post, не закрывая соединения? Например, мне...

Необходимо перехватить ответ на post-запрос, отредактировать его, и отправить дальше - C#
Ситуация такая пишу свой браузер, специфика задачи не позволяет использовать стандартные, необходимо перехватить ответ на post-запрос, там...

Как отправить POST или GET запрос на сайт, доступный только по протоколу HTTPS - C#
День добрый, По протоколу HTTP когда получаю страницу все работает отлично, а когда протокол HTTPS запрос идет неправильный. Из...

Как отправить POST запрос на роутер для включения/отключения черного списка по mac адресам - C#
С помощью Charles посмотрел, что за запрос отправляется при нажатии на кнопку "Применить". Скопировал все с url адресом, получилось вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru