Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/27: Рейтинг темы: голосов - 27, средняя оценка - 4.85
3 / 3 / 1
Регистрация: 05.05.2013
Сообщений: 42
1

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

28.02.2014, 13:23. Показов 5092. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2014, 13:23
Ответы с готовыми решениями:

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

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

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

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

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

Решение

Crag Hack, куки надо хранить, есть пример на powershell, чуть позже мб скину, если доступ будет)
1
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
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2014, 18:14

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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


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

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

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