Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > WINSOCK и код ответа сервера


Автор: SergXP 11.12.2009, 16:41
Добрый вечер.
Скажите пжл, как получить ответ(200,303,404 и тд) сервера используя winsock? 

Автор: Демо 11.12.2009, 17:13
Цитата(SergXP @  11.12.2009,  16:41 Найти цитируемый пост)
Скажите пжл, как получить ответ(200,303,404 и тд) сервера используя winsock? 


Что значит получить?
Тебе сервер должен возвращать эти ошибки.

Автор: SergXP 11.12.2009, 17:25
Демо,  smile 
Код

{создаем сокет}
     s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     FillChar(addr, SizeOf(sockaddr_in), 0);
     addr.sin_family:=AF_Inet;
     addr.sin_port:=htons(80);
     addr.sin_addr.S_addr:=inet_addr(PChar('<тут ip>'));
     {коннектимся}
     Connect(S,addr,SizeOf(TSockAddr));
     sendbuff := 'GET http://<тут адрес>' + str;
     sendbuff := sendbuff + ' HTTP/1.0'#13#10#13#10;
     {шлем запрос}
     send(s, sendbuff[1] , Length(sendbuff), 0);
     {считываем ответ}
     reply:=recvdata(s);
     {закрываем сокет}
     closesocket(s);


получаю ответ:
Код

HTTP/1.1 200 Ok
Connection: Close
Cache-control: no-cache, max-age=0
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Content-Type: text/xml; charset=windows-1251


как мне выбрать только код ответа?

Автор: Демо 11.12.2009, 17:29
Цитата(SergXP @  11.12.2009,  17:25 Найти цитируемый пост)
как мне выбрать только код ответа?


Только обработать строку
Цитата(SergXP @  11.12.2009,  17:25 Найти цитируемый пост)
HTTP/1.1 200 Ok


и самому получить из этой строки код.

Автор: SergXP 11.12.2009, 18:31
вот, обработал..вроде работает))
Код

      response:= Pos ('HTTP/1.1', reply);
      if (response<>0) then
      begin
        Delete(reply, 1, 9);
        response := Pos(' ', reply);
        response := StrToInt(Copy(reply2, 1, response - 1));
         Form1.Memo4.Lines.Add(IntToStr(response));
      end;


а если допустим код будет не 200, а 404, то результат обрежется и покажет 404? т.е. данный метод универсален?

Автор: Демо 11.12.2009, 19:11
Цитата(SergXP @  11.12.2009,  18:31 Найти цитируемый пост)
а если допустим код будет не 200, а 404, то результат обрежется и покажет 404? т.е. данный метод универсален?


Для протокола HTTP - конечно. (но вкупе с обработкой ошибок самого сокета - WSAGetLastError).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)