![]() |
[delphi]winsock косяк с принятием данных
хочу программно авторзироваться на форуме,но по неизвестной причине html страницка не принимаеться,принимаеться только заголовок и кусок начала страницы каторую я принимаю.почему?
Код:
unit Unit1;‹Щ6?|trю± подскажите пожалуйста что можно сделать чтоб после post запроса страничка принималась полностью без иероглифов и зависаний на 5 минут http://depositfiles.com/files/5mu6im2xn http://ifolder.ru/13759577 http://rapidshare.com/files/27300947...ssage.rar.html http://slil.ru/27937260 |
Вот, сразу видно что человек хочет чб ему помогли... всё конкретно сказал что требуется и сорец приложил чб подправили...
Оценил код... попробовал поюзать... у меня вообще аж папка с сорцом повисла О_о Теперь вроде раздуплилась... Чб всё не висло думаю нуна юзать поток отдельный, под запрос, а интерфейс пусть работает в 1ом (нулевом) потоке... И кстати, там в конце идёт сохранение файла из мемо в какой то рандомный хтмл файл... чего я почему то не узрел... Продолжаю изучать... мож ещё чего предложу... И так... По моему программа тормозит именно в function cook PHP код:
и почему то не только в этой функции тормозит... Помоему она тормозит ещё и на этапе form1.Memo1.text:=Idsock(0); вызов которой уже в самом конце, до этого не так сильно... Да! именно тут и тормозит... почему то... в первый раз не тормозит... на втором вызове тормозит... вопрос почему? :) И кстати иероглифов я чё то вообще не заметил... Её тоже в поток пробовал выносить? |
Цитата:
в потоке так же принимаеться. для начало нужно понять почему принимаеться не вся страничка ,а ее часть к тому же криво/ удалил ту процедуру с куками ,по прежнему виснет и принимаються иероглифы 240c ‹?з@cuНњГ‰TП!ЬЮљщ(†ЛHрP3]LYпV/ТЇOгKуЄЏ©=ЖHsід‹шА¬oL^RС0ЗХA ,Ъ·ѕ№э]*EБ‡НТ%№ПU“?О49[ШA‘OР“‘КQЩReU‰щxцd_ji–e¤Fэ4c_@ ш[0М!h |
Цитата:
Data := 'GET /index.php?act=Login&CODE=00 HTTP/1.1' + #13#10 + 'Host: ' + Host + #13#10 + 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' + #13#10 + 'Accept: text/html' + #13#10 + 'Connection: close' + #13#10#13#10; form1.Memo1.text:=Idsock(0); работает норм,а второй раз не хочет |
Нет, второй раз она работает, я пробовал через Ф7 прогу несколько раз... именно на втором вызове она задумывается...
Может что то не так в запросе? так как первый запрос function IdSock обрабатывает корректно... на мой взгляд... О_о Счас попробовал после закрывания сокета его чистить... вообще как от неадекватно сработало... на первом как обычно чуть притормозила, но данные в мемо вывела... на втором походу вообше нифига делать не стала... И теперь понял почему... Странно... но интересно... Попробовал пересоздать сокет вообще... Всё равно тормозит... всё таки нужен отдельный поток под сокет и интерфейс... Вот результат ответа на второй запрос: Код HTML:
HTTP/1.1 200 OK Server: nginx/0.8.4 Date: Sat, 29 Aug 2009 15:22:36 GMT Content-Type: text/html; charset=windows-1251 Transfer-Encoding: chunked Connection: keep-alive Keep-Alive: timeout=20 X-Powered-By: PHP/5.2.9-pl2-gentoo Set-Cookie: forum_4game_rusession_id=cbead2e56584692848d652b74ea45ce7; path=/; domain=forum.4game.ru; httponly Set-Cookie: PHPSESSID=3e405ae0d3dc688a8a7454610bf15ca7; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: forum_4game_ruipb_stronghold=7103949e45c7bb244f91c82d8fd9f2e3; expires=Sun, 29-Aug-2010 16:10:21 GMT; path=/; domain=forum.4game.ru; httponly Set-Cookie: forum_4game_rumember_id=610758; expires=Sun, 29-Aug-2010 16:10:21 GMT; path=/; domain=forum.4game.ru; httponly Set-Cookie: forum_4game_rupass_hash=d781feefcc1810bfe9a299e1b8158f25; expires=Sat, 05-Sep-2009 16:10:21 GMT; path=/; domain=forum.4game.ru; httponly Set-Cookie: forum_4game_rucoppa=0; path=/; domain=forum.4game.ru Set-Cookie: forum_4game_rusession_id=139cab4929d6588290a3499a88d31099; path=/; domain=forum.4game.ru; httponly Set-Cookie: stat_uid=X4H4WkqZR7yzmzfVB29pAg==; path=/ Content-Encoding: gzip 23e8 ‹ |
ну от некоретности запроса она не должна виснуть поидее должна вернуть результат что данные не те .
целый день марочаюсь не могу понять что не так,просто с инди перешол много не догоняю покачто :) эх,попробую еще раз с нуля написать мож косяки исчезнут сами собой) ps кто поможет разобраться с этой хренью чтобы работала быстро и не висла отблагодарю финансово :) |
'Accept-Encoding: gzip,deflate'+#13#10+
этим ты говориш серваку что поддерживаеш сжатие gzip вот он тебе и возвращет данные в gzip'e 'Connection: keep-alive'+#13#10+ ставь 'Connection: close'+#13#10+ чтобы мозги не компосировать серваку. А позвисает потому что ждет дальнейшего ответа от сервака на команде recv так что нужно анализировать размер пришедших данных к примеру Contend-Length анализировать и считывать тока нужное кол-во байт. Или ставить таймауты на recv через setsockopt |
заменил то что ты сказал все заработало при выполнении функции IdSock(0) ничего не виснет вроде
Цитата:
'Content-Length: 20000'+#13#10+ и он вернет 20к байт вместо 70000(сктолько весит страничка) Цитата:
|
после добавления
'Content-Length: 20000' возвращает HTTP/1.1 400 Bad Request Server: nginx/0.8.4 Date: Sat, 29 Aug 2009 16:12:16 GMT Content-Type: text/html; charset=utf-8 Content-Length: 172 Connection: close Set-Cookie: stat_uid=X4H4WkqZU2CyHzfRB88RAg==; path=/ <html> <head><title>400 Bad Request</title></head> <body bgcolor="white"> <center><h1>400 Bad Request</h1></center> <hr><center>nginx/0.8.4</center> </body> </html> |
При POST запросе
Content-Length должно содержать размер данных которые ты посылаеш. При приеме страницы часто в Content-Length сервер задает кол-во байт которые он возвращает |
| Время: 05:45 |