Winsock (Проблема с полученными данными)

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

Winsock (Проблема с полученными данными)

Сообщение zaf » 21.05.2008 (Ср) 21:53

Делаю так

Код: Выделить всё
Function Getversionhtml()
Winsock7.Close
Getversionhtmlx = ""
Winsock7.Protocol = sckTCPProtocol 'Установка протокола
Winsock7.Connect "***.ru", 80 'подключение через порт 80
While Not Winsock7.State = 7 'Ждем, пока подключится.
DoEvents '
Wend '


Winsock7.SendData "GET /index.html" & Forz & " HTTP/1.1" & vbCrLf
Winsock7.SendData "User-Agent:Opera/9.27 (Windows NT 5.1; U; ru)" & vbCrLf
Winsock7.SendData "Host: ***.ru" & vbCrLf
Winsock7.SendData "Referer:http://***.ru/" & vbCrLf
Winsock7.SendData "Accept:text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1" & vbCrLf
Winsock7.SendData "Accept-Language:ru-RU,ru;q=0.9,en;q=0.8" & vbCrLf
Winsock7.SendData "Accept-Charset:iso-8859-1, utf-8, utf-16, *;q=0.1" & vbCrLf
Winsock7.SendData "Connection: Keep -Alive, TE" & vbCrLf & vbCrLf
End Function


а потом так

Код: Выделить всё

Private Sub Winsock7_DataArrival(ByVal bytesTotal As Long)
Dim Datacxyzx As String
Getversionhtmlx = Getversionhtmlx & Datacxyzx
If (InStr(1, Getversionhtmlx, "</html>") > 0) Then 'Если страница загрузилась полностью
Winsock7.Close
text1.text = Getversionhtmlx '<<<<
End If



в Text1.text получаю много ненужного и непонятного(((
а например:
Получаю вот это "h
76e6
ttp://"
А должно быть это "http://"
т.е. без переносов и т.п.((( не весь текст такой а в редких местах


1) С чем это связано?(


___________

Мечтаю в запрос добавить вот это:
Winsock7.SendData "Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0" & vbCrLf

но при этом хочу чтобы в ТекстБокс (text1) сунулся нормальный читабельный текст.

2) Как это можно Реализовать?
Последний раз редактировалось zaf 24.05.2008 (Сб) 7:30, всего редактировалось 1 раз.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 21.05.2008 (Ср) 22:58

Это связано, скорее всего, что сервер даёт данные порциями, 76e6 - это, похоже, размер очередной порции данных.

И уж, во всяком случае, весьма сомнительно вот это:

Код: Выделить всё

If (InStr(1, Getversionhtmlx, "</html>") > 0) Then 'Если страница загрузилась полностью
Winsock7.Close


zaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 27.03.2006 (Пн) 23:04

Сообщение zaf » 21.05.2008 (Ср) 23:29

Alexanbar писал(а):Это связано, скорее всего, что сервер даёт данные порциями, 76e6 - это, похоже, размер очередной порции данных.

И уж, во всяком случае, весьма сомнительно вот это:

Код: Выделить всё

If (InStr(1, Getversionhtmlx, "</html>") > 0) Then 'Если страница загрузилась полностью
Winsock7.Close



Решение проблемы - убрать "Winsock7.Close" ?
или изменить условие конца загрузки страницы?

=) Намекните пожалуйста что мне делать?)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.05.2008 (Чт) 8:01

Ничего.
При ответе в заголовках тебе приходит, что ответ будет возвращен порциями (chunked). 76e6 — это размер порции. Считывай блоки данного размера и соединяй их в одно целое.
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 22.05.2008 (Чт) 18:01

По-моему, сервер сам закроет соединение, когда все передаст.

Другое дело, если хочется закончит сеанс раньше, чем требуется.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.05.2008 (Чт) 23:21

Не закроет. В версии 1.1 соединение не закрывается сервером.
Lasciate ogni speranza, voi ch'entrate.

zaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 27.03.2006 (Пн) 23:04

Сообщение zaf » 24.05.2008 (Сб) 7:25

Каждый раз порция разная то 76e6 то 76e2
Как мне найти длину?
Для чего это вообще передается? Для того чтобы проверить на предмет целостности принятых данных или?

Может кто посоветует код со скрейкой принятого текста?
Да при больший страницах действительно шлет
"Transfer-Encoding: chunked" не замечал

zaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 27.03.2006 (Пн) 23:04

Сообщение zaf » 24.05.2008 (Сб) 7:28

Ааааа я в панике.
Теперь "3ef7" появляется не по среди текста по несколько раз
а в начале сразу после заголовка

Код: Выделить всё
HTTP/1.1 200 OK
Server: nginx/0.5.35
Date: Sat, 24 May 2008 04:27:03 GMT
Content-Type: text/html; charset=windows-1251
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.0-8+etch11
Pragma: no-cache
Cache-control: private, must-revalidate

3ef7

<!DOCTYPE........

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

Сообщение Хакер » 24.05.2008 (Сб) 10:26

zaf
Почему ты юзаешь для этих целей низкоуровневый WinSock? Есть какая-то объективная причина использовать его, а не WinHTTP?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 24.05.2008 (Сб) 16:30

zaf писал(а):Каждый раз порция разная то 76e6 то 76e2
Как мне найти длину?
Для чего это вообще передается? Для того чтобы проверить на предмет целостности принятых данных или?


Это и есть длина блока данных в шестнадцатеричном представлении


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 86

    TopList  
cron