Имя: Пароль:
1C
 
WinHttp. Получить текст html страницы
0 Zixxx
 
26.08.15
16:10
Пробую получить текст страницы по ссылки, URL - произвольная ссылка

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("GET", URL, Ложь);
WinHttp.Send();
Если WinHttp.Status = 200 Тогда
    Текст = WinHttp.ResponseText;
    Возврат Текст;
Иначе
    Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText);
    Возврат "";
КонецЕсли;

В итоге получаю ошибку.

Ошибка при вызове метода контекста (Send): Произошла исключительная ситуация (WinHttp.WinHttpRequest): Область данных, переданная по системному вызову, слишком мала.

Ошибка выходит для любой ссылке. Как получить текст html по ссылке через WinHttp? Или есть какие-то другие методы? Через ПолеHTML  документа не подходит
1 Lexey_
 
26.08.15
16:18
(0) HTTPЗапрос
2 Zixxx
 
26.08.15
16:41
(1) Что я делаю не так?

    HTTPЗапрос = Новый HTTPЗапрос();
    HTTPЗапрос.АдресРесурса = "/topic.php?id=751707";

    Соединение = Новый HTTPСоединение("http://www.forum.mista.ru";, , , , Новый ИнтернетПрокси, , Новый ЗащищенноеСоединениеOpenSSL);
    
    ОтветHTTP = Соединение.Получить(HTTPЗапрос);

    Тело = ОтветHTTP.ПолучитьТелоКакСтроку();
3 Lexey_
 
26.08.15
16:49
(2) убери http:// и  Новый ЗащищенноеСоединениеOpenSSL
4 efim16rus
 
26.08.15
16:56
Соединение = Новый HTTPСоединение("http://www.forum.mista.ru";);

И всё работает!
5 Zixxx
 
26.08.15
17:26
Тело возвращает как

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

Что еще добавить нужно?
6 Asmody
 
26.08.15
17:41
зачем тебе ssl на мисте?
7 Zixxx
 
26.08.15
17:52
(6) Убрал уже, брал из примера который был, но результат от этого не поменялся
8 Lexey_
 
26.08.15
18:01
(7) весь код посмотреть бы
9 Asmody
 
26.08.15
18:36
(7) код ответа 301 - это постоянный редирект. Надо в заголовках смотреть на location и брать оттуда адрес.
10 Zixxx
 
26.08.15
19:03
(8)

HTTPСоединение = Новый HTTPСоединение("forum.mista.ru");
HTTPЗапрос = Новый HTTPЗапрос("/topic.php?id=751707");
ВременныйФайл = ПолучитьИмяВременногоФайла();
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
КодСостояния = HTTPОтвет.КодСостояния;
responseText = HTTPОтвет.ПолучитьТелоКакСтроку();
Сообщить(responseText);
11 Lexey_
 
26.08.15
19:06
(10) HTTPСоединение = Новый HTTPСоединение("http://www.forum.mista.ru";);
12 Lexey_
 
26.08.15
19:06
(11) без http, но с www
13 Lexey_
 
26.08.15
19:08
(11) http форум дописал
14 Рэйв
 
26.08.15
19:09
следующий вопрос наверное будет- как парсить то что получил:-)
15 Asmody
 
26.08.15
19:09
(13) форум - он такой
16 Рэйв
 
26.08.15
19:10
(15)Злой
17 Asmody
 
26.08.15
19:10
(14) Зачем парсить мисту?
18 Рэйв
 
26.08.15
19:10
(15)И к нубам злой и просто так стал:--)
19 Рэйв
 
26.08.15
19:11
(17)здрасте. он html собрался получать
20 Рэйв
 
26.08.15
19:11
его можно конечно как текст разобрать, но сам понимаешь что это за гемор:-)
21 Asmody
 
26.08.15
19:18
(20) Если html валидный, его можно в ДокументHTML засунуть, оттуда получить ДокументDOM, а его уже обрабатывать через xpath. Это уже обсуждали с примерами.
22 Рэйв
 
26.08.15
19:23
(21)Я не сомневаюсь, что ты бы его и через скуль провернул:-)
23 Asmody
 
26.08.15
19:53
(22) Я бы его провернул через какой-нибудь маленький сервис, который мне отдал бы нужные данные на тарелочке.
24 Котокот
 
26.08.15
22:10
(0) Твоя ошибка в том, что ты используешь WinHTTP. Сделай так:

    ЧтениеHTML        = Новый ЧтениеHTML;
    ЧтениеHTML.ОткрытьФайл("http://www.forum.mista.ru&quot;, "utf-8");
    ПостроительDOM    = Новый ПостроительDOM;
    ДокументDOM        = ПостроительDOM.Прочитать(ЧтениеHTML);
    Если ДокументDOM.Тело = Неопределено Тогда
        // Ответ не получен
Сообщить("Оу щит");
            Иначе
        // Получили ответ
        ТекстСтраницы    = ДокументDOM.Тело.ТекстовоеСодержимое;
    КонецЕсли;
25 Котокот
 
26.08.15
22:14
+(24) Тут, если что, уже и готовый ДокументHTML впридачу, перебирай его, если надо, доставай нужные элементы и их содержимое, парсить ничего не надо.
26 Zixxx
 
26.08.15
22:25
(25) А что такое щит?
27 Asmody
 
26.08.15
22:28
(26)
28 Котокот
 
26.08.15
22:31
(26) “Ship High In Transit” (”перевозить только наверху”)
http://pikabu.ru/story/proiskhozhdenie_slova_shit_106762