Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tcurl и потоки 
:(
    Опции темы
vetalkov
Дата 7.9.2011, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.9.2011

Репутация: нет
Всего: нет



Ребята подскажите пожалуйста как загнать содержимое сайта в переменную а не в файл.
Код

procedure CurlPost;
var
  Curl: TCurl;
begin
  Curl := TCurl.Create(nil);
  Curl.URL := Self.url;
  Curl.HttpHeader.Add('User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.20) Gecko/20110803 Firefox/3.6.20 GTB7.1 ( .NET CLR 3.5.30729; .NET4.0E)');
  Curl.HttpHeader.Add('Accept: image/png,image/*;q=0.8,*/*;q=0.5');
  Curl.HttpHeader.Add('Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3');
  Curl.HttpHeader.Add('Accept-Encoding: deflate');
  Curl.HttpHeader.Add('Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7');
  Curl.HttpHeader.Add('Keep-Alive: 5');
  Curl.HttpHeader.Add('Connection: keep-alive');
  if Self.Refferer = '' then Curl.HttpHeader.Add('Referer: '+ Self.url) else Curl.HttpHeader.Add('Referer: '+Self.Refferer);
  if Self.data <> '' then Curl.PostFields := Self.data;
 
  Curl.CookieFile := Self.CookieFile;
  Curl.OutputFile := 'TempFile.html'; // вот здесь результат GET/POST запроса записывается в файл.
 // хотя может по идее быть передан в Curl.OutputStream := в переменную
 
  if not Curl.Perform then
  begin
    Self.ResultSendData := false;
  end
     else Self.ResultSendData := true;
 
  Curl.Free;
end;
 


пробовал так

Код

var
  buf:TMemoryStream;
.....
 
 buf := TMemoryStream.Create;
 Curl.OutputStream := buf;
Memo1.Lines.LoadFromStream(buf);
 
// выдает ошибку access violation



помогите разобраться плиз
PM MAIL   Вверх
kami
Дата 7.9.2011, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Код

buf := TMemoryStream.Create; 
Curl.OutputStream := buf;
[U]buf.Seek(0, soBeginning);[/U]
Memo1.Lines.LoadFromStream(buf);

Кстати, это только одна из ошибок. Не работал с этим CURL, посему остальные подсказать не могу.


Это сообщение отредактировал(а) kami - 7.9.2011, 12:27
PM MAIL WWW   Вверх
AndreyIQ
Дата 7.9.2011, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: нет
Всего: 8



Цитата(kami @ 7.9.2011,  12:25)
Код

buf := TMemoryStream.Create; 
Curl.OutputStream := buf;
[U]buf.Seek(0, soBeginning);[/U]
Memo1.Lines.LoadFromStream(buf);

Кстати, это только одна из ошибок. Не работал с этим CURL, посему остальные подсказать не могу.

У него повидимому не в это ошибка, потому что Memo1.Lines.LoadFromStream(buf); без проблем читает без  установки позиции, просто Memo1 пустой будет и ошибки не выдаст.
PM MAIL   Вверх
MetalFan
Дата 7.9.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



что за TCURL такой? где на него посмотреть? может OutputStream внутри объекта создается?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
vetalkov
Дата 7.9.2011, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.9.2011

Репутация: нет
Всего: нет



Цитата(MetalFan @ 7.9.2011,  14:17)
что за TCURL такой? где на него посмотреть? может OutputStream внутри объекта создается?

вот тут 
http://curl.haxx.se/libcurl/pascal/
http://curlpas.sourceforge.net/doc/

PM MAIL   Вверх
AndreyIQ
Дата 8.9.2011, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: нет
Всего: 8



Цитата(vetalkov @ 7.9.2011,  21:31)
Цитата(MetalFan @ 7.9.2011,  14:17)
что за TCURL такой? где на него посмотреть? может OutputStream внутри объекта создается?

вот тут 
http://curl.haxx.se/libcurl/pascal/
http://curlpas.sourceforge.net/doc/

Цитата

OutputStream: pointer   - See   tCurl.WriteFunction
....
HeaderFunction: curl_write_callback
 Function pointer that should match the following prototype: 
...
 type tCurlHeaderFunction = 
  function(ptr: pChar; size, nmemb:dword; stream:pointer):dword; cdecl; 
...
 This function gets called as soon as there is received header data that needs to be written down. 
 The headers are guaranteed to be written one-by-one and only complete lines are written. 
 Parsing headers should be easy enough using this. 
 The size of the data pointed to by ptr is ( size * nmemb ). 
 The pointer named stream will be the one you set with the tCurl.HeaderStream property.
 Return the number of bytes actually written or return zero to signal an error to the library 
 (it will cause it to abort the transfer with a CURLE_WRITE_ERROR return code).



PM MAIL   Вверх
MetalFan
Дата 8.9.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



ясно. OuputStream - это указатель на callback функцию, а не на поток... отлично назвали) логично и понятно.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
kami
Дата 8.9.2011, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(MetalFan @  8.9.2011,  11:36 Найти цитируемый пост)
OuputStream - это указатель на callback функцию, а не на поток... отлично назвали

Назвали, конечно, здорово.
Только OutputStream - это (имхо) не callback функция, а ее параметр stream: pointer
PM MAIL WWW   Вверх
MetalFan
Дата 8.9.2011, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



kami, согласен. невнимательно прочитал) назначаем функцию WriteFunction, в нее будет передан указатель OutputStream... я так понял.
вот кстати отличный экзампл а тут все остальные примеры
а вообще, зачем этот изврат с TCURL? есть же более простые в использовании библиотеки.... тот же synapse

Это сообщение отредактировал(а) MetalFan - 8.9.2011, 15:55


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
vetalkov
Дата 9.9.2011, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.9.2011

Репутация: нет
Всего: нет



Цитата(MetalFan @ 8.9.2011,  15:52)
kami, согласен. невнимательно прочитал) назначаем функцию WriteFunction, в нее будет передан указатель OutputStream... я так понял.
вот кстати отличный экзампл а тут все остальные примеры
а вообще, зачем этот изврат с TCURL? есть же более простые в использовании библиотеки.... тот же synapse

решил писать используя synapse ))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1004 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.