Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

HTTP Get, через TClientSocket   Найти похожие ветки 

 
delpher_gray ©   (2004-05-16 14:50) [0]

Как выполнить HTTP запрос GET через TClientSocket ? Какие данные нужно посылать ?
И как принять только содержание страницы (заголовок не нужен)


 
Михаил   (2004-05-16 15:11) [1]

Да самому интересно какой там должен быть запрос?


 
FireMan_Alexey ©   (2004-05-16 15:41) [2]

Создай TSServerSocket скажем на 9000 порту выключи инет и настрой свой браузер на прокси 127.0.0.1 и порт 9000.
напиши любой адрес и  увидишь запрос от IE к Серверу.
На твой запрос отосланный в инет тем же TClientSocket-том прийдет вся страничка, а затем принимаешь ее до дисконнекта со стороны сервера, а затем запихуешь в строку.
Далее Элементарные знания паскаля:
Var
 Index1,Index2:Integer;
 telo:String;
Begin
Index1:=Pos("<BODY>",Твоя строка);
Index2:=Pos("</BODY>",Твоя строка);
Telo:=Copy(Твоя строка,Index1,Index2-Index1);
End;
Вот и все!


 
delpher_gray ©   (2004-05-16 16:12) [3]

Соединяюсь с localhost:80, посылаю:
GET /index.php HTTP/1.0\n\n

Ответа нет :(


 
Polevi ©   (2004-05-16 16:41) [4]

а что у тебя слушает на 80 порту


 
delpher_gray ©   (2004-05-16 17:23) [5]

Апач.
Главно когда в тельнете пишу: GET /index.php HTTP/1.0\n\n, то всё работает.


 
Polevi ©   (2004-05-16 17:33) [6]

код


 
Ihor Osov'yak ©   (2004-05-16 17:34) [7]

2 [3] delpher_gray ©   (16.05.04 16:12)

Хм. а какое \n\n? Может все же "GET /index.php HTTP/1.0"#13#10#13#10
?


 
Polevi ©   (2004-05-16 17:49) [8]

> [7] Ihor Osov"yak ©   (16.05.04 17:34)
именно для этого попросил код :)


 
delpher_gray ©   (2004-05-16 19:08) [9]

Socket.Host := "localhost";
Socket.Port := 80;
Socket.Open;
Socket.SendText("GET /index.php HTTP/1.0");
Socket.Close;


 
Polevi ©   (2004-05-16 19:10) [10]

Socket.Host := "localhost";
Socket.Port := 80;
Socket.Open;
Socket.SendText("GET /index.php HTTP/1.0"+#13#10#13#10);
Socket.Close;


 
SergP ©   (2004-05-16 20:21) [11]


> Socket.Host := "localhost";
> Socket.Port := 80;
> Socket.Open;
> Socket.SendText("GET /index.php HTTP/1.0");
> Socket.Close;


Ну то что в конце запроса не хватает #13#10#13#10 это одно. Да и [10] Polevi ©   (16.05.04 19:10) об этом уже сказал. Но я не вижу где ты принимаешь ответ? Вижу только что запрос послал и закрываешь сокет.
К тому же не знаю как там оно работает с localhost"ом, но если работать по сети то после Socket.Open вроде бы нужно подождать пока установится соединение...


 
Polevi ©   (2004-05-16 20:55) [12]

>после Socket.Open вроде бы нужно подождать пока установится соединение...
это если неблокирующий режим


 
Rouse_ ©   (2004-05-16 22:15) [13]

Оффтоп:
Вот сколько занимаюсь сетью, не могу понять одного - почему не используется WinInet специально предназначенный для таких целей, а используется TClientSocket предназначенный для решения совершенно других задач? А потом все дружно начинают задавать вопросы по основам запросов и принятия ответов к/от  сервера...


 
Ihor Osov'yak ©   (2004-05-17 01:08) [14]

2 [13] Rouse_
Ну, я собственно такие вещи через  WinInet  и делаю. А здесь - собственно только реплика и была..
По существу  - использование wininet подразумеват умение работать с потоками, или наличия понятия об ассинхронном режиме.. Кинуть TClientSocket на форму  - иногда проще бывает.. Хотя может здесь я и не прав. В смысле, что кинуть на форму и проще, но получить качественный результат - это еще как сказать... В общем случае приключений получить можно больше, чем с wininet. Хотя это имхо - сети - это далеко не самая сильная моя сторона.


 
Rouse_ ©   (2004-05-17 01:19) [15]

> [14] Ihor Osov"yak ©   (17.05.04 01:08)
Игорь - ну к тебе то вопросов вообще у меня нет... твой уровень мне известен, просто странно что многие с упорством раненного кабана пытаются пролезть через абсолютно непонятные им вещи в надежде получить минимально приемлемый результат. И данный момент несколько раз уже обсуждался, причем строились все доводы в пользу использования WinInet и по разграничению - где он может применяться а где нет...


 
Ihor Osov'yak ©   (2004-05-17 01:50) [16]

2 Rouse_ ©   (17.05.04 01:19)

>  где он может применяться а где нет...
Если можно ссылочку - был бы благодарен  - а то я немного отсутствовал на форуме - сию вещь пропустил - а было бы интересно взглянуть
> твой уровень мне известен
спасибо, но в сетях я действительно пока не сильно оторвался от бегин левел..


 
delpher_gray ©   (2004-05-17 06:38) [17]

C WinInet были проблемы (глючило), а в форуме никто не подскзал почему. Я знал как сделать неглючную посылку/приём данных только через WinSock. Сейчас вроде с WinInet разобрался, всё работает...


 
Polevi ©   (2004-05-17 10:23) [18]

я если честно вообще не в курсе что такое WinInet :-)


 
panov ©   (2004-05-17 10:32) [19]

FSend - строка, посылаемая серверу.
FQuery - запрос, посылаемый серверу.

FSend := "GET " + FQuery + " HTTP/1.1"+ CRLF+
      "User-Agent: Mozilla/4.0 (Windows;compatible; MSIE 5.5) +CRLF+
      "Host: "+FHost+CRLF+
      "Accept: */*"+CRLF+
      "Accept: image/gif"+CRLF+
      "Accept: image/x-xbitmap"+CRLF+
      "Connection: close"+CRLF+CRLF;


 
Rouse_ ©   (2004-05-17 14:08) [20]

> [16] Ihor Osov"yak ©   (17.05.04 01:50)
Ссылку к сожалению найти не могу - вероятно ветка должна быть уже в архивах, поэтому придется ждать пока дайджесты не заработают :)

> [18] Polevi ©   (17.05.04 10:23)
uses ..., WinInet + в MSDN описано стандартная очередность выполнения функций...
Очень удобно, если не охота разбираться с сокетами и остальным... :)


 
Polevi ©   (2004-05-17 14:38) [21]

>[20] Rouse_ ©   (17.05.04 14:08)
да, по декларации ф-ий ясно что за зверь :)


 
nikkie ©   (2004-05-17 20:13) [22]

>Очень удобно, если не охота разбираться с сокетами и остальным... :)
а есть охота разбираться с WinInet :))

то обсуждение тоже мимо меня проскочило, я бы почитал...

для меня большим доводом против использования WinInet является то, что это черный ящик, работающий с открытыми протоколами, допускающими реализацию кем угодно. таким образом, если в определенной конфигурации клиент-прокси-сервер возникает проблема, то сделать уже что-либо проблематично. не знаю также, как обстоят с различными версиями WinInet, что там менялось и т.д.

ну и, конечно, использование соответствующих компонент, скажем Indy, просто значительно проще, чем работа с WinInet.


 
Rouse_ ©   (2004-05-17 21:18) [23]

> просто значительно проще, чем работа с WinInet.
Не согласен... причем в корне...

Через некоторое время, если со временем все будет как я и планирую выложу обертку вокруг WinInet где все решено на уровне примитива...
Включая прокси и остальные удобности...
Хотя кто знает...


 
nikkie ©   (2004-05-17 22:41) [24]

>выложу обертку вокруг WinInet где все решено на уровне примитива...
а если без обертки? InternetOpen, InternetConnect,  HttpOpenRequest, HttpSendRequest, InternetReadFile, InternetCloseHandle - и это проще, чем IdHTTP.Get(...)? на обертку твою интересно посмотреть будет, конечно.

>Включая прокси и остальные удобности...
а если прокси - не HTTP-прокси, а SOCKS-прокси? будет работать?


 
Rouse_ ©   (2004-05-17 23:05) [25]

> а если прокси - не HTTP-прокси, а SOCKS-прокси? будет работать?
Планирую и это и HTTPS ...
Вопрос только во времени...



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.035 c
4-1086249279
Yuriy
2004-06-03 11:54
2004.07.18
Работа с почтовым клиентом по-умолчанию


3-1087469865
alsov
2004-06-17 14:57
2004.07.18
Tools для работы с Ораклом


3-1088182867
zokzok
2004-06-25 21:01
2004.07.18
ttable vs tquery


4-1086339082
SigalX
2004-06-04 12:51
2004.07.18
Как свернуть программу в значок около часов???


1-1088661794
AndrewK
2004-07-01 10:03
2004.07.18
Как можно сделать подключаемые модули к программе