InternetOpenUrl не отдает русский текст. Заголовки?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

InternetOpenUrl не отдает русский текст. Заголовки?

Сообщение Floyd » 28.09.2010 (Вт) 18:21

Здравствуйте.
есть стнадартная всем известная функция
Код: Выделить всё
Function openURL(ByVal sUrl As String) As String
    Const INTERNET_OPEN_TYPE_PRECONFIG = 0, INTERNET_OPEN_TYPE_DIRECT = 1, INTERNET_OPEN_TYPE_PROXY = 3, INTERNET_FLAG_RELOAD = &H80000000
    Dim hOpen As Long, hOpenUrl As Long, bDoLoop As Boolean, bRet As Boolean, sReadBuffer As String * 2048, lNumberOfBytesRead As Long, sBuffer As String, sHeaders As String
    hOpen = InternetOpen("VB Project FL", 1, vbNullString, vbNullString, 0)
    hOpenUrl = InternetOpenUrl(hOpen, sUrl, sHeaders, Len(sHeaders), INTERNET_FLAG_RELOAD, 0)
    bDoLoop = True
    While bDoLoop
        sReadBuffer = vbNullString
        bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
        sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
        If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
    Wend
    If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
    If hOpen <> 0 Then InternetCloseHandle (hOpen)
    openURL = sBuffer
End Function

Но "в лоб" она не отдает корректно русский текст. Например открывая главную страницу Яндекса.
Как видите, я уже добавил вместо нулей sHeaders,
даже пробовал посылать вот так:
Код: Выделить всё
  sHeaders = "Accept-Language: ru,en-us" & vbCrLf & _
                    "Accept-Charset: Windows-1251,utf-8" & vbCrLf & _
                    "Accept-Encoding: gzip, deflate" & vbCrLf & _
                    "Content-Language: ru,en-us" & vbCrLf & _
                    "Content-Charset: Windows-1251,utf-8" & vbCrLf & _
                    "Content-Encoding: gzip, deflate" & vbCrLf & _
                    "Content-Type: application/x-www-form-urlencoded; charset=Windows-1251" & vbCrLf & _
                    "CACHE-CONTROL: no-cache" & vbCrLf & _
                    "CONNECTION: Keep-Alive" & vbCrLf & _
                    "USER-AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"

Может, кто-то решал эту проблему уже.
Нужно ли морочиться с заголовками, или можно как-то после переконыертировать кракозябры ( Новости Янде ) в русский текст?
Спасибо.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: InternetOpenUrl не отдает русский текст. Заголовки?

Сообщение FireFenix » 28.09.2010 (Вт) 18:45

VB хранит строки в уникоде... после получения контента парси заголовок и преобразовывай контент из кодировки, которая указана в заголовке с сервера Content-Charset
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: InternetOpenUrl не отдает русский текст. Заголовки?

Сообщение Floyd » 28.09.2010 (Вт) 19:04

а как это сделать? на выхлопе я имею только код хтмл без заголовков.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: InternetOpenUrl не отдает русский текст. Заголовки?

Сообщение Хакер » 28.09.2010 (Вт) 22:22

Почитай

Всё ещё осталось желание использовать WinInet?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: InternetOpenUrl не отдает русский текст. Заголовки?

Сообщение Floyd » 29.09.2010 (Ср) 11:30

Хакер, почитал, спасибо.
Мне если честно советовали делать общение с интернетом (мне нужно заходить на страницу и парсить инфу) через сокеты.
но так и не нашел реального примера, как это грамотно осуществить.
посоветуйте пожалуйста ссылку или технологию (если через сокет на самом деле не тру), как мне общаться с инетом по своему вопросу?
спасибо.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: InternetOpenUrl не отдает русский текст. Заголовки?

Сообщение Хакер » 29.09.2010 (Ср) 12:50

WinHttp.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: InternetOpenUrl не отдает русский текст. Заголовки?

Сообщение Floyd » 30.09.2010 (Чт) 13:33

Спасибо. все вопросы сняты, тему можно закрыть. для будущих поколений:
Код: Выделить всё
Function openURL(ByVal sUrl As String) As String
    Dim whr As New WinHttpRequest
    whr.Open "GET", sUrl
    whr.Send
    openURL = whr.ResponseText
End Function


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 103

    TopList