Показать полную графическую версию : [решено] Отделить заголовок от html
morgan1991
14-04-2010, 14:36
Попробуйте моим последним кодом обработать test.png »
неа, не получается...
Ладно раз ничего не сделать, тогда сделаю обновление изображения пока не скачается то что нужно...
madmasles
14-04-2010, 17:13
morgan1991,
Я ведь все свои эксперименты проводил с Вашим файлом из первого поста. С этим файлом у меня работает, а с другими... ? не знаю.
Прикрепите хотя бы 2 файла с разными заголовками, может что и получится.
morgan1991
14-04-2010, 19:40
Решил сам, заметил если появляется эта строчка перед пнг 12156, то добавляется
Transfer-Encoding: chunked
Вот я и сделал так:
Local $FileReadBody = FileOpen($sFile, 0)
If StringInStr(FileRead($FileReadBody), "Transfer-Encoding: chunked") > 0 Then
For $i = 1 To 13
$Body &= FileReadLine($hRead) & @CRLF
Next
Else
For $i = 1 To 12
$Body &= FileReadLine($hRead) & @CRLF
Next
EndIf
Вместо:
For $i = 1 To 12
$line = FileReadLine($hRead)
Next
madmasles, а как вы так код расскрашиваете, что он с ссылками выводится?
madmasles
14-04-2010, 19:51
morgan1991,
В Опциях посмотрите.
266903582
14-04-2010, 19:57
А так?
$somedata=FileOpen("1.txt",16)
$filtered=BinaryToString(FileRead($somedata))
while StringLeft($filtered,1)<>"‰"
$filtered=StringTrimLeft($filtered,1)
WEnd
FileWrite("1.png",StringToBinary($filtered))
madmasles
14-04-2010, 20:13
266903582,
Ваш код у меня отрабатывает, как надо. :)
morgan1991
18-05-2010, 01:15
Вот ещё возник вопрос,необходимо получить весь код который присылает сервер, но как это сделать?
Вот мои мысли:
Получить заголовок
Затем из заголовка выковырять длинну контента и затем уже принимать данные через tcprecv пока колличество полученных данных меньше Content-lenght.
НО как обычно есть но. Не могу отделить заголовок до того как начинаю получать html, чтобы знать сколько данных принято и непонимаю почему иногда в заголовке приходит Content-lenght: число, а иногда просто число...
А что, - для закачки картинки нужно обязательно сокеты использовать?
Может есть смысл качнуть Wget'ом - он дополнительно может сохранять заголовки ответа сервера в отдельный файл и куки обрабатывает...
Во-первых насчет прикола с Content-Lenght - там сервер(а точнее скрипт) не корректное тело отдает... Я так понимаю, что грузятся капчи :smirk:
Вобщем если все-таки нужно коннектится именно через сокеты и грузить бинарные данные то заголовки от содержимого в теле ответа отделяются так:
#include <String.au3>
#include <Array.au3>
;$serv_resp_data - данные полученые через tcprecv
$content = _StringExplode($serv_resp_data, @CRLF&@CRLF, 1)
$heads=$content ; - заголовки ответа
$body=$content ; - тело ответа
Ну а уже вышеописаную проблему добавления отсебятины в тело ответа можно решать через фильтрацию HEX-данных, например если нужно грузить только картинки форматов JPG/GIF/PNG - делаем вот так:
$jpg_hdr="FFD8FFE000104A464946"
$gif_hdr="47494638"
$png_hdr="89504E470D0A"
$body2hex=_StringToHex($body) ; конвертируем тело ответа в HEX-строку
$jpg_hdr_res=StringInStr($body2hex, $jpg_hdr)
$gif_hdr_res=StringInStr($body2hex, $gif_hdr)
$png_hdr_res=StringInStr($body2hex, $png_hdr)
If $jpg_hdr_res Then
$trim_body_hex=StringTrimLeft($body2hex, $jpg_hdr_res-1)
Elsif $gif_hdr_res Then
$trim_body_hex=StringTrimLeft($body2hex, $gif_hdr_res-1)
Elsif $png_hdr_res Then
$trim_body_hex=StringTrimLeft($body2hex, $png_hdr_res-1)
Else
MsgBox(4096, "", "Неккоректный формат бинарных данных в теле ответа!")
Exit
EndIf
$body2str=_HexToString($trim_body_hex)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.