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

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

28.02.2014, 13:23. Просмотров 3657. Ответов 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 запрос
Есть сайт когда туда заходишь надо указать что тебе больше 18 и т.д. Хочу...

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

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

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

Как отправить POST запрос и проверить правильные ли данные
Добрый день! Мне необходимо посылать POST запрос на страницу...

5
Psilon
Master of Orion
Эксперт .NET
5989 / 4842 / 901
Регистрация: 10.07.2011
Сообщений: 14,458
Записей в блоге: 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
5989 / 4842 / 901
Регистрация: 10.07.2011
Сообщений: 14,458
Записей в блоге: 5
Завершенные тесты: 4
03.03.2014, 23:42 #4
Лучший ответ Сообщение было отмечено Crag Hack как решение

Решение

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
5989 / 4842 / 901
Регистрация: 10.07.2011
Сообщений: 14,458
Записей в блоге: 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

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

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

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


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

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

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