Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 23.08.2009, 06:21   #1
AngelOfDeath
Delphi/C++/Asm
Форумчанин Подтвердите свой е-майл
 
Аватар для AngelOfDeath
 
Регистрация: 28.03.2008
Сообщений: 358
Вопрос HTTP Не получает ответ

В общем пишу свой модуль для работы с HTTP
Но возникла проблема
сервер не присылает ответ
А если присылает то после как минимум после 30 запросов

Вот что выводиться у меня в Memo:
Цитата:
Соединяемся с 209.85.135.147:80

Посылка пакета:
GET /index.html HTTP/1.0
User-Agent: Mozilla/5.0 ( (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Accept: */*
Referer: http://www.google.ru
Host: www.google.ru

Отправлено: 396
Процедура отправки:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
a:array of char;
begin
Memo1.Lines.Add(#13+#10+'Посылка пакета'+':'+#13+#10+Packet1.Packet);
i:=Length(Packet1.packet);
SetLength(a, i);
for I := 1 to Length(Packet1.Packet) do
begin
  a[i]:=Packet1.Packet[i];
end;
i:=send(Sock, a, Length(Packet1.Packet)*sizeof(char),  0);
Memo1.Lines.Add('Отправлено: '+IntToStr(i));
end;
Функция формирования пакета:
Код:
procedure TPacketSend.FormPacket(Method, URL, ProtocolVersion, Connection,
  UserAgent, Accept, Referer, Host, AceptLanguage: string);
begin
Packet:='';
Packet:=Method+' '+URL+' '+ ProtocolVersion+#13+#10+
//'Connection: '+Connection+#13+#10+
'User-Agent: '+UserAgent+#13+#10+
'Accept: '+Accept+#13+#10+
'Referer: '+Referer+#13+#10+
'Host: '+Host+#13+#10;//+
//'Accept-Language: '+AceptLanguage+#13+#10;
end;

И наконец процедура приёма(buf массив байтов):
Код:
procedure THReadProc();
var
str:string;
i:Integer;
size:Integer;
begin
while true do
begin
str:='';
size:=recv(Sock, buf, 5000, 0);
if size>0 then
begin
for i := 0 to size do
str:=str+ char(buf[i]);
Form1.Memo1.Lines.Add('Приём пакета размером '+ IntToStr(size)+ ':'+#13+#10+str);
end;
end;
end;
Процедура соеденения():
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateSocket('www.google.ru');

Packet1.FormPacket('GET', '/index.html', 'HTTP/1.0',
'Keep-Alive','Mozilla/5.0 ( (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
' */*','http://www.google.ru', 'www.google.ru','ru-RU');

connect(Sock, addr, sizeof(addr));

thread:=CreateThread(nil, 0, @THReadProc, nil,0, dummy);
end;

procedure TForm1.CreateSocket(host:PAnsiChar);
var
vHostent:PHostEnt;
IP:string;
Paddr:PAnsiChar;
begin
Sock:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if Sock=INVALID_SOCKET then
ShowMessage('INVALID SOCKET');
vHostent:= gethostbyname(host);
Paddr:=vHostent.h_addr_list^;
IP:=Format('%d.%d.%d.%d', [byte(Paddr[0]), byte(Paddr[1]),byte(Paddr[2]),byte(Paddr[3])]);
addr.sin_family:=AF_INET;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr(PAnsiChar(AnsiString(IP)));
Memo1.Clear;
Memo1.Lines.Add('Соединяемся с '+IP+':80');
end;

Вот что выводится если клиент смог принять даные:
Код HTML:
Приём пакета размером 1494:
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 1350
Date: Sun, 23 Aug 2009 02:24:24 GMT
Server: GFE/2.0



<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>400 Bad Request</title>
<style><!--
body {font-family: arial,sans-serif}
div.nav {margin-top: 1ex}
div.nav A {font-size: 10pt; font-family: arial,sans-serif}
span.nav {font-size: 10pt; font-family: arial,sans-serif; font-weight: bold}
div.nav A,span.big {font-size: 12pt; color: #0000cc}
div.nav A {font-size: 10pt; color: black}
A.l:link {color: #6f6f6f}
A.u:link {color: green}
//--></style>
<script><!--
var rc=400;
//-->
</script>
</head>
<body text=#000000 bgcolor=#ffffff>
<table border=0 cellpadding=2 cellspacing=0 width=100%><tr><td rowspan=3 width=1% nowrap>
<b><font face=times color=#0039b6 size=10>G</font><font face=times color=#c41200 size=10>o</font><font face=times color=#f3c518 size=10>o</font><font face=times color=#0039b6 size=10>g</font><font face=times color=#30a72f size=10>l</font><font face=times color=#c41200 size=10>e</font>&nbsp;&nbsp;</b>
<td>&nbsp;</td></tr>
<tr><td bgcolor="#3366cc"><font face=arial,sans-serif color="#ffffff"><b>Error</b></td></tr>
<tr><td>&nbsp;</td></tr></table>
<blockquote>
<H1>Bad Request</H1>
Your client has issued a malformed or illegal request.

<p>
</blockquote>
<table width=100% cellpadding=0 cellspacing=0><tr><td bgcolor="#3366cc"><img alt="" width=1 height=4></td></tr></table>
</body></html>

Последний раз редактировалось AngelOfDeath; 23.08.2009 в 06:38.
AngelOfDeath вне форума Ответить с цитированием
Старый 23.08.2009, 11:36   #2
KREGI
Форумчанин
 
Аватар для KREGI
 
Регистрация: 29.11.2008
Сообщений: 333
По умолчанию

Попробуйте с другим URL, с гуглом такая проблема встречается.
Если помог - Весы слева
KREGI вне форума Ответить с цитированием
Старый 23.08.2009, 13:02   #3
AngelOfDeath
Delphi/C++/Asm
Форумчанин Подтвердите свой е-майл
 
Аватар для AngelOfDeath
 
Регистрация: 28.03.2008
Сообщений: 358
По умолчанию

Да и вправду
Другие URL ответили сращу
Но всё равно проблема
Вот изменения в процедуре отправки:
Код:
for I := 1 to Length(Packet1.Packet) do
begin
  a[i-1]:=Packet1.Packet[i];
end;
Пробовал отправлять массив байт, char
бесполезно
Вот что выходит:
Цитата:
Соединяемся с 195.216.243.21:80

Посылка пакета:
GET /GLSL.rar HTTP/1.0
User-Agent: Mozilla/5.0 ( (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Accept: */*
Referer: http://kovalexey.my1.ru/
Host: kovalexey.my1.ru

Отправлено: 404
Приём пакета размером 274:
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<p align="center" style="font-size: 48px; color: #000000">400 Bad Request</p>
<br><br><br><br><br><br><br><hr><ce nter><i>UcoZXSrv/1.4.9</i><br><b>UcoZ Web Services</b></center>
</body>
</html>
Запрос вроде верный, так как Reget Deluxe использует такой же:
Цитата:
ReGet Deluxe 5.2.0.330 Personal
GET /GLSL.rar HTTP/1.0
User-Agent: Mozilla/5.0 ( (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Accept: */*
Referer: http://kovalexey.my1.ru/
Host: kovalexey.my1.ru


Ответ:
Input 5 19:58:22 23.8.2009 HTTP/1.1 200 OK
Input 5 Server: UcoZXSrv/1.4.9
Input 5 Date: Sun, 23 Aug 2009 08:58:22 GMT
Input 5 Content-Type: application/x-rar-compressed
Input 5 Content-Length: 1583899
Input 5 Last-Modified: Fri, 31 Jul 2009 13:51:55 GMT
Input 5 Connection: close
Input 5 Accept-Ranges: bytes

___________________________________ ____________
2KREGI,
Цитата:
Сообщение от KREGI Посмотреть сообщение
Код:
for I := 1 to Length(Packet1.Packet) do
begin
  a[i]:=Packet1.Packet[i];
а так?
у тебя a нулевое получается. возможно из за этого?

Код:
for I := 1 to Length(Packet1.Packet) do
begin
  a[i-1]:=Packet1.Packet[i];
end;
В том то и дело что этот код исправляет это 0 значение в начале массива
Вся строка помещается в массив (могу залить скрины дебагера, где это отлично видно)

Последний раз редактировалось AngelOfDeath; 23.08.2009 в 15:21.
AngelOfDeath вне форума Ответить с цитированием
Старый 23.08.2009, 13:06   #4
KREGI
Форумчанин
 
Аватар для KREGI
 
Регистрация: 29.11.2008
Сообщений: 333
По умолчанию

Код:
for I := 1 to Length(Packet1.Packet) do
begin
  a[i]:=Packet1.Packet[i];
а так?
у тебя a нулевое получается. возможно из за этого?
Если помог - Весы слева

Последний раз редактировалось KREGI; 23.08.2009 в 13:17.
KREGI вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Http ответ сервера lennon Свободное общение 4 03.08.2009 02:34
Написать программу в результате выполнения которой булевская переменная t получает true если выполняется Корделия Общие вопросы C/C++ 1 28.04.2009 13:53
Как Uninstall Manager получает иконки программ OracleLover Общие вопросы Delphi 13 24.04.2009 15:25
F.A.Q(Вопрос-Ответ) ben95 Помощь студентам 17 07.01.2008 14:26
Ответ LeoN Общие вопросы Delphi 0 07.09.2007 20:02