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

Вниз

Работа с сокетом   Найти похожие ветки 

 
pOLyMOrpH ©   (2005-08-19 07:28) [0]

добрейшего времени суток, уважаемые мастера.
у меня такая проблема:

код функции:
-----------------------------------------------------------------------------------------------------------------------
function Recv_Send_Data(params:string):string;
var
 bufer : array [0..1023] of Char; {буфер для приема ответа с сервака}
 sock  : integer;       {адрес сокета}
 error : integer;       {обработка ошибок}
 wData : WSADATA;
 addr  : sockaddr_in;
 phe   : PHostEnt;
begin
 //Инициализация сокета
 Result := "";
 WSAStartup($101, wData);

 phe := gethostbyname(PChar(string(host)));

 if phe = nil then
   begin
     WSACleanup;
     Exit;
   end;

 sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

 if sock = INVALID_SOCKET then
   begin
     WSACleanup;
     Exit;
   end;

 addr.sin_family := AF_INET;
 addr.sin_port   := htons(80);
 addr.sin_addr   := PInAddr(phe.h_addr_list^)^;

 error := connect(sock, addr, sizeof(addr));
 if error = SOCKET_ERROR then
   begin
     closesocket(sock);
     WSACleanup;
     Exit;
   end;

 // отправляем
 send(sock, params[1], Length(params), 0);

 // принимаем
 ZeroMemory(@bufer, 1024);
 error := recv(sock, bufer, 1024, 0);
 while error > 0 do
   begin
     Result := Result + Copy(bufer, 0, error);
     error  := recv(sock, bufer, 1024, 0);      
   end;

 // Закрываем сокет
 closesocket(sock);
 WSACleanup;
end;
------------------------------

вызов:
----------------------------------------------------------------------------------------
host:="host.com";

request := "GET http://" + host +  "/blabla?bla..." +  " HTTP/1.0"#13#10#13#10;

// к примеру
memo1.Lines.Add(Recv_Send_Data(request));
---------------------------------------------------------------------------------------

собственно вопрос:
пытаюсь слить хтмл исходник произвольной страницы с произвольного сервера.
почему в некоторых случаях я, задав определенный хост, получаю ответ вообще с другого сервера?

конкретный пример:
задаю хост - amigos.com
ответ приходит с friendfinder.com (т.е. совершенно другая страница).

причем если в кач-ве хоста указывать например yandex.ru, то все работает на ура.

оч. интересно как с этим бороться?
жду ваших мыслей и предложений.


 
XProger ©   (2005-08-19 08:04) [1]

Редиректом это зовётся ;)


 
pOLYmORph ©   (2005-08-19 08:09) [2]

а как это можно реализовать?
ведь остальные браузеры "работают нормально", т.е. получают задданную им страницу...


 
pOLyMOrpH ©   (2005-08-19 10:07) [3]

а может я request неправильно составляю? например в IE открывается требуемая страница.


 
XProger ©   (2005-08-21 03:07) [4]

Запусти снифер и посмотри, как к нему обращается IE и твоя программа для сравнения :)


 
atruhin ©   (2005-08-21 10:07) [5]

1. Не правильное формирование запроса. Полный URI используется только при работе через прокси, при обращении к хосты нужно указывать только ресурс и имя хоста в параметре host.
2. Данная процедура возможно сработает только для очень "тепличных условий". Так как send это функция о чем неоднократно говорилось, в recv если ты получил все пересланные данные - это не значит что сервер переслал все, т.е. сервер переслал часть страницы, может сделать паузу, потом переслать остаток, а ты уже закрыл сокет.



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

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

Наверх




Память: 0.48 MB
Время: 0.029 c
14-1131908060
Wolfram
2005-11-13 21:54
2005.12.04
Как заставить Delphi выделять, а не просто подсвечивать текст?


4-1128080146
Signate
2005-09-30 15:35
2005.12.04
Ширина строки


3-1129806468
Карелин Артем
2005-10-20 15:07
2005.12.04
Select к хранимой процедуре.


2-1132082575
Kirill_
2005-11-15 22:22
2005.12.04
Привет! Как мне найти миньшее число из 6 данных?


2-1132170232
ilya_ae
2005-11-16 22:43
2005.12.04
Что это значит?