Вверх ↑
Этот топик читают: Гость
Ответов: 95
Рейтинг: 10
#1: 2011-03-17 20:11:19 ЛС | профиль | цитата
В общем такая ситуёвина( Нужно скачать картинку, http_get не подходит так-как для отображения картинки нужно подключать куки, реализовал это TCP-clientом, авторизуюсь, получаю куки с ними посылаю запрос на картинку, в результате получаю правильные ответы(такие дает браузер в месте с картинкой) от сервера типа

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: image/jpeg
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 16 Mar 2011 17:37:52 GMT
Content-Length: 7578

но уже несколько часов не могу выкачать сам массив с картинкой
Помогите советом, буду очень признателен
Прилагаю схемку, сделана не аккуратно но работает логин и пасс тестовые

code_22993.txt
карма: 1

0
файлы: 1code_22993.txt [5.9KB] [153]
Ответов: 294
Рейтинг: 64
#2: 2011-03-18 01:37:10 ЛС | профиль | цитата
Надо получить капчу?

Можно так (на идеальность не претендую):
code_22999.txt

карма: 0

0
файлы: 1code_22999.txt [6.3KB] [179]
Разработчик
Ответов: 26170
Рейтинг: 2127
#3: 2011-03-18 02:41:52 ЛС | профиль | цитата
Quest писал(а):
Можно так (на идеальность не претендую):

Мдааа... Уж. Я не занимаюсь инетом, но все же -- я приводил ведь уже схемку. Вот адаптировано к схеме от bardak-a

code_23001.txt
карма: 22

0
файлы: 1code_23001.txt [3.8KB] [212]
Ответов: 294
Рейтинг: 64
#4: 2011-03-18 02:58:58 ЛС | профиль | цитата
nesco писал(а):
Мдааа... Уж

Ну так предупреждал
Quest писал(а):
на идеальность не претендую


А все таки, (для себя интересно) чем в данном конкретном случае схема из этих 3 элементов:
Add(StreamConvertor,699790,539,644)
{
Mode=2
link(onResult,16533493:doSearch,[])
}
Add(BlockFind,16533493,581,644)
{
StartBlock="FFD8FFE0"
EndBlock="FFD9"
link(onSearch,7144761:doConvert,[])
}
Add(StreamConvertor,7144761,630,644)
{
Mode=1
}


хуже этой из 9:
Add(BlockFind,1462634,469,378)
{
@Color=9360639
Delete=0
StartBlock="HTTP"
EndBlock="13101310"
link(onEndSearch,10572300:doConvert,[])
}
Add(Convertor,10572300,518,385)
{
@Color=9360639
Mode=12
link(onResult,13112055:doCopy,[])
}
Add(StreamCopy,13112055,567,385)
{
@Color=9360639
Count=-1
link(onCopy,3184583:doCompare,[])
link(Dest,10146094:Var2,[])
}
Add(MemoryStream,2954231,567,273)
{
@Color=9360639
Point(doPosition)
}
Add(GetDataEx,10146094,567,312)
{
link(Data,2954231:Stream,[])
}
Add(BlockFind,15263772,413,329)
{
@Color=9360639
IncludeBlock=1
Delete=0
StartBlock="Content-Length: "
EndBlock="1310"
link(onSearch,9106325:doConvert,[])
link(onEndSearch,1462634:doSearch,[(457,342)(457,384)])
}
Add(Memory,12957497,623,329)
{
@Color=9360639
}
Add(Convertor,9106325,469,329)
{
@Color=9360639
Mode=1
link(onResult,12957497:doValue,[])
}
Add(If_else,3184583,616,385)
{
@Color=9360639
link(Op1,2954231:Size,[(622,370)(580,370)])
link(Op2,12957497:Value,[])
}
Add(DoData,4801834,518,287)
{
@Color=9360639
Data=Integer(0)
link(onEventData,2954231:doPosition,[])
}



Быстродействием? А можно разницу заметить "на глаз"? Или еще чем то?
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#5: 2011-03-18 03:18:54 ЛС | профиль | цитата
Quest, я тебе скажу чем -- или ты никогда картинок с инэта не тянул, а они никогда не передаются в одном потоке сразу. На этом многие попадались. Потом делали шаровые глаза и спрашивали, а что это у меня картинка только кусок имеет, или вообще не грузится. Поставь дебаг и посмотри, что эта картинка передается несколькими частями. Я показал, как это надо делать правильно, с использованием накопителя потока и использованием Content-Length:
------------ Дoбавленo в 03.09:
Quest, кстати, только что запустил твою схему, а она, увы, не работает, как я и предполагал. Не у всех MTU может быть больше размера картинки, учитывать это надо, кадрами она передается, кадрами, а не вся сразу. Да и HEX преобразование там зачем
------------ Дoбавленo в 03.18:
Так что, Quest, не все корткое правильное
карма: 22

0
Ответов: 294
Рейтинг: 64
#6: 2011-03-18 03:21:02 ЛС | профиль | цитата
Нет, что подход антинаучный - это я знал заранее.
Но думал, что в случае с заведомо "легкой" по размеру картинкой проблем не будет.

Насчет неработоспособности... я никогда не выкладываю непроверенных схем (скрин приложен, обновлял картинку "стопицот" раз - без сбоев), а вот особенности сети - да, стоило учесть.
преобразование в HEX там для поиска начала/конца jpeg.

[flood]
nesco писал(а):
не все корткое правильное

Ничего, лучше короткий и неправильный код, чем... )))[/flood]

карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#7: 2011-03-18 03:27:45 ЛС | профиль | цитата
Quest, начало контекста всегда начинается после двух переводов строки, или это новость для тебя
Quest писал(а):
никогда не выкладываю непроверенных схем

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

А вот это, батенька, в нашем деле самое главное. Надо учитывать не то, что есть у тебя, а то, что может быть у других
карма: 22

0
Ответов: 294
Рейтинг: 64
#8: 2011-03-18 05:00:31 ЛС | профиль | цитата
О, кстати, вглядевшись пристальнее в основную схему (не в способ выцепления картинки), обнаружил в ней ошибки, приводящие к множественному запросу (4 раза), то есть нам ответ от сервера приходил на 4 запроса подряд.
Сохранялись 2 полноценные капчи (с разными цифрами) и две "битые". Можно убедиться, посмотрев, что запрашивается у сервера (нижний TCPClient в схеме) или сохраняя файлы на диск, приделав в конце что-то в этом роде:
Add(Jpeg,11574856,658,504)
{
@Color=16757169
Point(doLoadFromStream)
Point(FileName)
link(FileName,5372540:Count,[])
}
Add(Hub,10351640,595,518)
{
@Color=16757169
OutCount=3
link(onEvent1,11574856:doLoadFromStream,[])
link(onEvent2,5372540:doNext,[(628,531)(628,454)])
link(onEvent3,11574856:doSave,[(641,538)(641,517)])
}
Add(Counter,5372540,658,448)
{
Min=1
}



Исправил, заодно удалил пару лишних связей (от точек Text у Edit-ов, ибо по событию onChange и так передается текст).
Позволил себе внести маленькое дополнение в блок от nesco, а именно очищение массива, для возможности обновить капчу не выходя из программы.

В общем вот:
Add(MainForm,4007105,231,119)
{
Width=741
Height=721
Caption=""
BorderStyle=3
Icon=[ZIPFE04000078DA63606004421E1E0620C9C1F0828581418C818141038881420C120C10711038C08009FEFFFF0FA63FE7FA32FC7D728FE1DFDB970C3FB72D63F8B17636C38FF95D7075F30D1818A6B64D621805A360140C1FC08802B8A100CC8628C0C206A9A08238925D08F0FF03B09C32200E83D402001CC5250C]
}
Add(TCP_Client,10034032,623,196)
{
Port=80
IP="95.131.24.244"
link(onRead,10439384:doCharset,[])
}
Add(Hub,13244677,581,196)
{
link(onEvent1,10034032:doOpen,[])
link(onEvent2,10034032:doSend,[(616,209)(616,216)])
}
Add(HTTP_PostBuilder,14479359,525,196)
{
URL="/logon"
Host="www.promo-immunitet.ru"
link(onBuild,13244677:doEvent1,[])
}
Add(FormatStr,3111088,420,196)
{
Mask="UserName=%1&Password=%2"
link(onFString,10559428:doCharset,[])
link(Str1,1204455:Text,[(426,170)(405,170)])
link(Str2,5525898:Text,[(433,171)(454,171)])
}
Add(Edit,1204455,399,105)
{
Left=5
Top=5
Width=115
Text="denis_bardak@mail.ru"
}
Add(Edit,5525898,448,105)
{
Left=125
Top=5
Width=115
Text="19843"
}
Add(Charset,10559428,469,196)
{
Type=6
link(onCharset,14479359:doBuild,[])
}
Add(RichEdit,184583,973,182)
{
Left=10
Top=235
Width=660
Height=205
ScrollBars=2
}
Add(Button,1683819,231,196)
{
Left=250
Top=620
link(onClick,3111088:doString,[])
}
Add(Charset,10439384,672,196)
{
Type=7
link(onCharset,11644460:doEvent1,[])
}
Add(BlockFind,4207673,826,210)
{
StartBlock=".ASPXAUTH"
EndBlock=";"
link(onSearch,15359009:doReplace,[])
}
Add(Hub,11644460,714,196)
{
OutCount=3
link(onEvent1,184583:doText,[])
link(onEvent2,1730105:doSearch,[(749,209)(749,167)])
link(onEvent3,4207673:doSearch,[])
}
Add(Edit,14159926,805,161)
{
Left=280
Top=5
Width=530
Text=""
}
Add(Edit,4200526,910,210)
{
Left=280
Top=30
Width=530
Text=""
link(onChange,6846226:doString,[(957,216)(957,273)(219,273)(219,328)])
}
Add(BlockFind,1730105,763,161)
{
StartBlock="ASP.NET_"
EndBlock=";"
link(onSearch,14159926:doText,[])
}
Add(FormatStr,6846226,224,322)
{
Mask="__utma=164098174.1301054235.1300211504.1300282287.1300283880.4; __utmz=164098174.1300211504.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); %1 __utmb=164098174.3.10.1300283880; __utmc=164098174; %2"
Point(FString)
link(onFString,10108902:doString,[])
link(Str1,14159926:Text,[(230,284)(811,284)])
}
Add(Edit,3311278,525,315)
{
Left=15
Top=70
Width=795
Text=""
}
Add(Charset,11718953,427,371)
{
Type=6
CodePage1=1251
link(onCharset,6636103:doEvent1,[])
}
Add(Replace,15359009,868,210)
{
SubStr=";"
link(onReplace,4200526:doText,[])
}
Add(Hub,6636103,476,371)
{
OutCount=3
link(onEvent1,10614830:doOpen,[])
link(onEvent2,10614830:doSend,[(512,384)(512,391)])
link(onEvent3,3311278:doText,[(497,391)(497,321)])
}
Add(FormatStr,10108902,280,322)
{
DataCount=1
Mask="GET /cabinet HTTP/1.1
Host: www.promo-immunitet.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.15) Gecko/20110303 MRA 5.6 (build 03399) Firefox/3.6.15 sputnik 2.4.0.48 WebMoney Advisor
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://www.promo-immunitet.ru/main?ReturnUrl=%2fcabinet%2fprofile%2ffillup%3fautoRedirect%3dtrue%26redirectUrl%3dhttp%253a%252f%252fwww.promo-immunitet.ru%252fcabinet&autoRedirect=true&redirectUrl=http%3a%2f%2fwww.promo-immunitet.ru%2fcabinet
Cookie: %1

"
Point(FString)
link(onFString,2223369:doEvent1,[])
}
Add(RichEdit,16218921,371,308)
{
Left=10
Top=105
Width=655
Height=125
ScrollBars=2
}
Add(Charset,5450629,581,371)
{
Type=7
link(onCharset,16000270:doSearch,[])
}
Add(TCP_Client,10614830,525,371)
{
Port=80
IP="95.131.24.244"
link(onRead,5450629:doCharset,[])
}
Add(DoData,7801882,371,371)
{
link(onEventData,11718953:doCharset,[])
link(Data,16218921:Text,[])
}
Add(BlockFind,16000270,637,371)
{
IncludeBlock=1
StartBlock="id="captcha-image" src=""
EndBlock="" width"
link(onSearch,13502116:doText,[])
}
Add(Edit,13502116,686,371)
{
Left=535
Top=630
link(onChange,1711999:doString,[(759,377)(759,436)(212,436)(212,496)])
}
Add(Charset,6896142,364,574)
{
Type=6
CodePage1=1251
link(onCharset,14200894:doEvent1,[])
}
Add(Hub,14200894,413,574)
{
link(onEvent1,10266910:doOpen,[])
link(onEvent2,10266910:doSend,[(445,587)(445,594)])
}
Add(FormatStr,1711999,224,490)
{
Mask="GET %2 HTTP/1.1
Host: www.promo-immunitet.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.15) Gecko/20110303 MRA 5.6 (build 03399) Firefox/3.6.15 sputnik 2.4.0.48 WebMoney Advisor
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: %1
Cache-Control: max-age=0

"
Point(FString)
link(onFString,9386017:doEvent1,[])
link(Str1,6846226:FString,[])
}
Add(RichEdit,1129834,308,476)
{
Left=10
Top=105
Width=655
Height=125
ScrollBars=2
}
Add(TCP_Client,10266910,462,574)
{
Port=80
IP="95.131.24.244"
Point(onProgress)
link(onRead,15263772:doSearch,[])
}
Add(DoData,2464722,308,574)
{
link(onEventData,6896142:doCharset,[])
link(Data,1129834:Text,[])
}
Add(Hub,2223369,329,322)
{
link(onEvent1,16218921:doText,[])
link(onEvent2,7801882:doData,[(352,335)(352,377)])
}
Add(Hub,9386017,273,490)
{
link(onEvent1,1129834:doText,[])
link(onEvent2,2464722:doData,[(297,503)(297,580)])
}
Add(Image,3627320,938,623)
{
@Color=16757169
Left=425
Top=450
Width=240
Height=100
}
Add(Jpeg,11574856,889,623)
{
@Color=16757169
Point(doLoadFromStream)
Point(doBitmap)
Point(Stream)
link(onBitmap,3627320:doLoad,[])
link(Stream,10146094:Var3,[(895,562)])
}
Add(BlockFind,1462634,588,623)
{
@Color=9360639
Delete=0
StartBlock="HTTP"
EndBlock="13101310"
link(onEndSearch,10572300:doConvert,[])
}
Add(Convertor,10572300,637,630)
{
@Color=9360639
Mode=12
link(onResult,13112055:doCopy,[])
}
Add(StreamCopy,13112055,686,630)
{
@Color=9360639
Count=-1
link(onCopy,3184583:doCompare,[])
link(Dest,10146094:Var2,[])
}
Add(MemoryStream,2954231,686,518)
{
@Color=9360639
Point(doPosition)
}
Add(Hub,10351640,840,630)
{
@Color=16757169
OutCount=4
link(onEvent1,4801834:doData,[(866,636)(866,511)(618,511)(618,538)])
link(onEvent2,11574856:doLoadFromStream,[])
link(onEvent3,11574856:doBitmap,[])
link(onEvent4,2954231:doClear,[(873,657)(873,504)(674,504)(674,531)])
}
Add(GetDataEx,10146094,686,557)
{
link(Data,2954231:Stream,[])
}
Add(InfoTip,14958065,511,476)
{
Info=#0:|17:Накопитель потока|
Font=[MS Sans Serif,8,1,0,1]
Frame=3
Width=295
Height=256
}
Add(InfoTip,7341891,812,476)
{
Info=#0:|32:Преобразование потока в картинку|
Font=[MS Sans Serif,8,1,0,1]
Frame=3
Width=183
Height=256
}
Add(BlockFind,15263772,532,574)
{
@Color=9360639
IncludeBlock=1
Delete=0
StartBlock="Content-Length: "
EndBlock="1310"
link(onSearch,9106325:doConvert,[])
link(onEndSearch,1462634:doSearch,[(576,587)(576,629)])
}
Add(Memory,12957497,742,574)
{
@Color=9360639
}
Add(Convertor,9106325,588,574)
{
@Color=9360639
Mode=1
link(onResult,12957497:doValue,[])
}
Add(If_else,3184583,735,630)
{
@Color=9360639
link(onTrue,10351640:doEvent1,[])
link(Op1,2954231:Size,[(741,615)(699,615)])
link(Op2,12957497:Value,[])
}
Add(DoData,4801834,637,532)
{
@Color=9360639
Data=Integer(0)
link(onEventData,2954231:doPosition,[])
}


[flood]nesco, а вот из спортивного интереса, при исправленном (одиночном) запросе, у вас отработает мой кривой метод? [/flood]

карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#9: 2011-03-18 08:54:16 ЛС | профиль | цитата
Quest писал(а):
Позволил себе внести маленькое дополнение в блок от nesco, а именно очищение массива, для возможности обновить капчу не выходя из программы

Ага, заметил. А я все думал -- заметят или нет
------------ Дoбавленo в 08.53:
Quest, у меня мой пример, с единственным запросом выдавал несколько потоков (от двух до семи)
карма: 22

0
Ответов: 95
Рейтинг: 10
#10: 2011-03-18 19:27:25 ЛС | профиль | цитата
Спасибо огромное, вы мне очень помогли
карма: 1

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)