Имя: Пароль:
1C
1С v8
Как получить ответ от сервера (и заголовок set-cookie)
, ,
0 Leksandr
 
17.05.13
12:48
Использую следующий код по отправке POST запроса на сайт:

ИЕ = Новый COMОбъект("InternetExplorer.Application");
ИЕ.Navigate("https://mysite.ru/block");

//маленький "костыль" от ошибки
ИЕ2 = Новый COMОбъект("InternetExplorer.Application");
ИЕ2 = ИЕ;
Куки = ИЕ2.Document.cookie;
Редер =ИЕ2.Document.location.href;

ПостДанные = "данные с логином и паролем";
ПостЗапрос = "POST " + "/block" + " HTTP/1.1
|Host: mysite.ru
|Connection: keep-alive
|Content-Length: 206
|Cache-Control: max-age=0
|Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|Origin: https://mysite.ru
|User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
|Content-Type: application/x-www-form-urlencoded
|Referer: "+ редер+ "
|Accept-Encoding: gzip,deflate,sdch
|Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
|Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3
|Cookie: " + Куки + Символы.ВК+Символы.ПС;

ИЕ.Navigate(Редер,,,ПостДанные,ПостЗапрос);

//здесь получаем куки и ссылку на следующую страницу
Куки = ИЕ.Document.cookie;
Редер =ИЕ.Document.location.href;

Для авторизации на сайте требуется использовать установленные сервером куки, которые можно посмотреть в ответе от сервера (через браузер) в заголовке set-cookie


HTTP/1.1 302 Moved temporarily
Date: Fri, 17 May 2013 08:42:06 GMT
Server: SAP NetWeaver Application Server / ABAP 700
content-type: text/html
content-length: 0
location: /block
set-cookie: MYSAPSSO2=AjQxMDMBABgyADQANwAxADYAVgBFAEgAIAAgACAAIAACAAYyADIAMAADABBHADMAUAAgACAAIAAgACAABAAYMgAwADEAMwAwADUAMQA3ADAAOAA0ADIABQAEAAAADAYAAlgACQACUgD%2fASowggEmBgkqhkiG9w0BBwKgggEXMIIBEwIBATELMAkGBSsOAwIaBQAwCwYJKoZIhvcNAQcBMYHzMIHwAgEBMEQwOTELMAkGA1UEBhMCREUxHDAaBgNVBAoTE1NBUCBUcnVzdCBDb21tdW5pdHkxDDAKBgNVBAMTA0MxMQIHIBIFBgBBRjAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTMwNTE3MDg0MjA2WjAjBgkqhkiG9w0BCQQxFgQUmQVD2gN2a0z1%21YT9BAsrkN7Hi8IwCQYHKoZIzjgEAwQwMC4CFQDRV0YNoImA6EGbODJ6lVa%211w%21hHwIVAIvorLXLdh%21ceKyix34eMzpUzc8G; path=/
Pragma: public
Cache-Control: public

Вопрос: как в 1С посмотреть ответ от сервера и заголовок set-cookie?
1 Leksandr
 
17.05.13
12:52
Возможно стоит переформулировать вопрос: есть ли возможность через  COMОбъект "InternetExplorer.Application" получить ответ от сервера? (не текст страницы)
2 oleg_km
 
17.05.13
15:21
Для этого нужно использовать HTTPСоединение или WinHTTP
3 Leksandr
 
17.05.13
15:28
(2) есть пример? юзал HTTPСоединение, на сколько я понял данный конструктор не позволяет получить ответ с сервера (response headers) - вернее мы не можем его увидеть по свойствам и методам 1С
4 Leksandr
 
17.05.13
15:42
Или с WinHTTP: тоже не можем посмотреть respond headers http://yadi.sk/d/1yBOgR1J4vHXG
5 acsent
 
17.05.13
15:44
(3) можем, но только  с 8.12.18
6 acsent
 
17.05.13
15:44
если ты про куки именно
7 acsent
 
17.05.13
15:45
Прокси = Новый ИнтернетПрокси;
   //Прокси.Установить("http", "127.0.0.1", 8888);
   
   HTTPСоединение = Новый HTTPСоединение("egrul.nalog.ru",,, Прокси);
   
   HTTPЗапрос = Новый HTTPЗапрос;
   HTTPЗапрос.АдресРесурса = "#";
   
   HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
   
   //
   Cookie = HTTPОтвет.Заголовки["Set-Cookie"];
8 oleg_km
 
17.05.13
15:53
(4) Бляха, ну кроме свойств у объекта бывают же еще методы: GetAllResponseHeaders (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383961(v=vs.85).aspx)
9 Leksandr
 
17.05.13
17:00
(8) Спасибо oleg_km! Не нашел этот метод сразу. Решил так:

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"Windows-1251");
WinHttp.Open("POST", "https://site.ru",0);
WinHttp.Send(НовыйЗапрос);

Кукиз= WinHttp.getResponseHeader("Set-cookie");
10 oleg_km
 
17.05.13
17:28
(9) И так можно.

>> Не нашел этот метод сразу

Так может лучше сразу про весь объект почитать, какие у него есть свойства, методы, даже события (хотя события 1Су не к чему)
11 AaNnDdRrEeYy
 
17.05.13
19:43
(10)Не события привязать можно как ВнешнееСобытие(), если очень нужно конечно
12 oleg_km
 
17.05.13
23:09
(11) Внешнее событие это вроде из ВК, а WinHTTP это все-таки КОМ