Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
{TidHTTP} как получить только заголовок. |

28.09.2008, 20:53
|
|
Познающий
Регистрация: 20.01.2008
Сообщений: 47
Провел на форуме: 71868
Репутация:
72
|
|
{TidHTTP} как получить только заголовок.
Вот возник вопрос как мне получать только заголовок страницы а не весь content?
Если нельзя то хотябы на сокетах покажите буду благодарен.
|
|
|

28.09.2008, 22:08
|
|
Постоянный
Регистрация: 19.10.2007
Сообщений: 794
Провел на форуме: 1013791
Репутация:
711
|
|
ммм, послать запрос HEAD странице, если HEAD "говорит"
Accept-Ranges: bytes
послать GET с указанием того, сколько надо считать
|
|
|

29.09.2008, 01:37
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
на сокетах простой пример
Код:
program head;
{$APPTYPE CONSOLE}
uses windows, winsock;
var s:TSocket;
initExit:BOOL=false;
httpQuery:array[0..20]of char='HEAD / HTTP/1.0'#13#10#13#10#13#10;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
//вывод текста описания ошибки и выход
procedure error(const ansiStr:string;ErrorCode:integer;bQuit:BOOL);
var Buffer: array[0..1023] of Char;
begin
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or
FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, ErrorCode, 0, Buffer,
SizeOf(Buffer), nil);
CharToOem(@Buffer, @Buffer);
write(ansiStr,'(',ErrorCode,') ',pChar(@Buffer));
if bQuit then halt(1);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
//Вызывается при закрытии консоли клиента
function ClientConsoleEvent(dwCtrlType:cardinal):BOOL;stdcall;
begin
initExit:=true;
shutdown(s,SD_SEND OR SD_RECEIVE);
closesocket(s);
ClientConsoleEvent:=true;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
//Узнать IP по имени хоста
function GetIpFromName(szServerName:pChar):TInAddr;
type TaPInAddr = array [0..0] of PinAddr;
PaPInAddr = ^TaPInAddr;
var phe: PHostEnt;
pptr: PaPInAddr;
begin
GetIpFromName.S_addr:=0;
phe := GetHostByName(szServerName);
if phe = nil then exit;
pptr := PaPInAddr(phe^.h_addr_list);
GetIpFromName:=pptr^[0]^;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
//Основная процедура клиента
procedure NetClient(const DestAddr:string;wPort:word);
var RemoteAddr:TSockAddr;
buf:array[0..1023]of char;
dwLen,hOut,beWritten:cardinal;
ip:TInAddr;
sPort:string;
begin
ip:=GetIpFromName(pChar(DestAddr));
if ip.S_addr=0 then
error('# error at gethostbyname: ',WSAGetLastError,TRUE);
fillchar(RemoteAddr, sizeof(RemoteAddr), 0);
RemoteAddr.sin_family:=AF_INET;
RemoteAddr.sin_port:=htons(wPort);
RemoteAddr.sin_addr:=ip;
str(wPort,sPort);
writeln('# host: ',DestAddr);
writeln('# ip : ',inet_ntoa(ip));
writeln('# port: ',wPort);
s:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if s=INVALID_SOCKET then
error('# error at socket: ',WSAGetLastError,true);
SetConsoleCtrlHandler(@ClientConsoleEvent, TRUE);
writeln('# connect...');
if connect(s,RemoteAddr,sizeof(TSockAddr))<>0 then begin
if not initExit then
error('# error at connect: ',WSAGetLastError,false);
closesocket(s);
exit;
end;
writeln('# success');
send(s,httpQuery,sizeof(httpQuery),0);
hOut:=GetStdHandle(STD_OUTPUT_HANDLE);
while true do begin
dwLen:=recv(s,buf,sizeof(buf),0);
if (dwLen=cardinal(-1)) OR (dwLen=0) then begin
if (not initExit)AND(dwLen=cardinal(-1)) then
error('# error at recv: ',WSAGetLastError,false);
if not initExit then closesocket(s);
exit;
end;
WriteFile(hOut,buf,dwLen,beWritten,nil);
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
var code:integer;
wPort:word;
InitData:TWSAData;
BEGIN
if (ParamCount=0)OR(ParamCount>2) then begin
writeln('Usage: head.exe host [port]');
halt(0);
end;
if ParamCount=1 then wPort:=80
else val(ParamStr(2),wPort,code);
if WSAStartup(MakeWord(2,2),InitData)<>0 then
error('# error at WSAStartup: ',WSAGetLastError,true);
NetClient(ParamStr(1),wPort);
WSACleanup;
END.
|
|
|

26.10.2008, 20:39
|
|
Новичок
Регистрация: 16.08.2006
Сообщений: 20
Провел на форуме: 64398
Репутация:
8
|
|
idhttp.head )
|
|
|

26.10.2008, 21:04
|
|
Постоянный
Регистрация: 20.06.2008
Сообщений: 323
Провел на форуме: 1240829
Репутация:
165
|
|
Зачем использовать вин апи если есть готовые компоненты
|
|
|

27.10.2008, 00:06
|
|
Новичок
Регистрация: 16.08.2006
Сообщений: 20
Провел на форуме: 64398
Репутация:
8
|
|
Код:
http := TIdHTTP.Create(nil);
http.ConnectTimeout := 30000;
http.ReadTimeout := 30000;
html := '';
try
http.Head(url);
finally
ResponseCode := http.ResponseCode;
ResponseHead := http.ResponseText;
http.Free;
end;
|
|
|

28.10.2008, 01:02
|
|
Участник форума
Регистрация: 23.07.2008
Сообщений: 202
Провел на форуме: 3075657
Репутация:
122
|
|
вот С#:
Код:
using System;
using System.Net;
class HeaderDemo
{
public static void Main()
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.osborne.com");
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
string[] names = resp.Headers.AllKeys;
Console.WriteLine("{0,-20}{1}\n", "Имя", "Значение");
foreach (string n in names)
Console.WriteLine("{0,-20}{1}\n", n, resp.Headers[n]);
resp.Close();
}
}

|
|
|

28.10.2008, 01:04
|
|
Познающий
Регистрация: 28.09.2007
Сообщений: 56
Провел на форуме: 4328058
Репутация:
86
|
|
Зачем использовать вин апи если есть готовые компоненты
лол. Девиз г***окодера
Последний раз редактировалось Jes; 28.10.2008 в 16:08..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|