Форум: "Сети";
Текущий архив: 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