Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
14-1131561542
Сафаров
2005-11-09 21:39
2005.12.04
Кто нибудь пытался реализовывать справочник адресов?


2-1132207668
aleshap
2005-11-17 09:07
2005.12.04
Как открыть страницу


2-1132307224
Zulus
2005-11-18 12:47
2005.12.04
Помогите вызвать net send


11-1113244167
Sup
2005-04-11 22:29
2005.12.04
KOLThread help


14-1131967997
Piter
2005-11-14 14:33
2005.12.04
Регулярные выражения (RegExp)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский