Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2012, 16:13   #1
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию GET без ответа winsock

Всем привет пишу маленькие программы на indy и тут задумался зачем убивать трафик на загружаемую страницу если можно просто передать серверу все необходимое, но в winsock мало шарю написал на нем модуль для гет'a с получением ответа методом копипаст и все=)
вот код:
Код:
interface

uses
winsock,Windows,SysUtils;
function get(url: string): string;
var
useragent:string='Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4';
Accept:string='application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
alang:string='ru-RU';
Connection:string='keep-alive';
implementation
function get(url: string): string;ф
var
 info: WSADATA;
sin: sockaddr_in;
myip: PHostEnt;
sHwnd: integer;
sBuff1:string;
sBuff, rBuff: array [0..5000] of char;
 host:string;
function hosttoip(name: string): string;
var
 wsdata  :twsadata;
 hostname:array [0..255] of char;
 hostent :phostent;
 addr    :pchar;
 ip      :string;
begin 
 wsastartup($0101, wsdata);
 try
   gethostname (hostname, sizeof (hostname));
   strpcopy(hostname, name);
   hostent := gethostbyname (hostname);
   if assigned (hostent) then
     if assigned (hostent^.h_addr_list) then
      begin
        addr := hostent^.h_addr_list^;
        if assigned (addr) then
         begin
           ip:=format('%d.%d.%d.%d', [byte (addr [0]),
           byte(addr [1]), byte (addr [2]), byte (addr [3])]);
           result := ip;
         end
        else
           result:='';
      end
     else
        result := ''
   else
    begin
      result := '';
    end;
 finally
   wsacleanup;
 end
end;
begin
WSAStartup(makeword(1,1),info);
sHwnd:=Socket(AF_INET, SOCK_STREAM, 0);
sin.sin_family:=AF_INET;
sin.sin_port:=htons(80);
host:=stringreplace(url,'http://','',[rfreplaceall]);
if pos('/',host)>0 then begin
host:=copy(host,1,pos('/',host)-1);
url:=stringreplace(url,'http://','',[rfreplaceall]);
url:=stringreplace(url,host,'',[rfreplaceall]);
end else 
url:='/';
sin.sin_addr.S_addr:=inet_addr(pchar(hosttoip(host)));
connect(sHwnd, sin, sizeof(sin));
sbuff1:='GET '+url+' HTTP/1.1' + #13#10 +
'Host: '+host + #13#10+
'User-Agent: '+useragent+#13#10+
'Accept: '+Accept+#13#10+
'Accept-Language: '+alang+#13#10+
'Connection: '+Connection+#13#10+#13#10;
CopyMemory(@sBuff,pchar(sBuff1),length(sBuff1));
send(sHwnd, sBuff, Length(sBuff), 0);
recv(sHwnd, rBuff, Length(rBuff), 0);
result:=(rBuff);
Closesocket(sHwnd);
WSACleanup;
end;
end.
я так понимаю просто надо не делать recv(sHwnd, rBuff, Length(rBuff), 0); и все?
Кольша вне форума Ответить с цитированием
Старый 07.04.2012, 16:14   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну да, только это идет в разрез с протоколом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.04.2012, 16:24   #3
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

??WTF?? Вообщем как быдет правильно и безболезнено?=)
Кольша вне форума Ответить с цитированием
Старый 07.04.2012, 16:53   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можете конечно попробовать так сделать, но как это будет работать неизвестно.
ибо HTTP это протокол вида запрос-ответ.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.04.2012, 19:37   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
зачем убивать трафик на загружаемую страницу если можно просто передать серверу все необходимое
Погодь. А Инди чем помешала? Ну ради бога, в свою страницу внедри AJAX, который будет запрашивать некий пакет данных, после по приходу размещаемый в каком нить DIV (я так делаю).
Кстати тут я уже пример выкладывал, кто-то про AJAX спрашивал.
Да вот хотя-бы моя тема: http://www.programmersforum.ru/showthread.php?t=174309
I'm learning to live...

Последний раз редактировалось Stilet; 07.04.2012 в 19:43.
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 19:44   #6
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

нет вы не поняли look:
авторизуюсь я на инди окда;
тырю из инди заголовок с куками;
посылаю их на сервер без обратного ответа;
Все это я хочу использовать для программы "я онлайн" понятно че делать будет=),а это что бы трафика меньше было=)
Кольша вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сокращение ответа STIFLER32 Microsoft Office Word 4 22.03.2012 18:41
жду ответа вовик 82 Помощь студентам 1 27.05.2011 11:15
тест без вариантлов ответа, уже сделала сама, но есть сомнения toosya Помощь студентам 0 28.02.2011 11:19
поиск ответа BUMPER Помощь студентам 0 18.06.2010 21:12
Интервал ответа Pavelok Работа с сетью в Delphi 3 16.05.2009 22:08