Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Общение с http формами. [D7, WinXP]


Страницы:   1 2

Atomik ©   (2004-03-22 22:41:00) 

Уважаемые мастера и знатоки :) Я хотел бы узнать, как возможно из соей программы заполнить несколько форм на http странице и "нажать" кнопку послать. Желательно с примером. Вот например для добавления вопроса в форум. Заранее огромное спасибо!


Piter   (2004-03-29 19:16:00) [1]

nikkie (24.03.04 20:01) [19]
про апплет ты зря. серверное приложение никто апплетом не называет


блин, ну извините. Я в том смысле, что форма находится на http://editorial.rostov.tele2.ru, а сама программа (PHP или там Perl или еще чего) находится на rocc.ru
Я все время апплетами называл


Reindeer Moss Eater   (2004-03-25 13:06:00) [2]

Значит, адрес аплета у тебя http://rocc.ru/cgi-bin/sms33.cgi
вообще на левом сайте, на этом твоем http://editorial.rostov.tele2.ruтолько форма лежит...


Если апплет (именно апплет) загружен с rocc.ru, то он никак не может отправить что бы то ни было на другой хост.

Нет там никакого апплета.


Карелин Артем   (2004-03-25 12:56:00) [3]

nikkie ©   (24.03.04 20:01) [19]
Сервлеты есть. А апплет переводится как маленькая программа, или как IE переводит "приложеньице"


nikkie   (2004-03-24 20:01:00) [4]

>Piter
про апплет ты зря. серверное приложение никто апплетом не называет.
имхо, термин используется применительно к
1. Java applets
2. Control panel applets


Piter   (2004-03-24 19:02:00) [5]

Atomik   (24.03.04 10:37) [17]
Спасибо, я разобрался - все получилось


Да? ОЧЕНЬ СТРАННО...

Atomik (23.03.04 20:09) [7]
выполняется код отправки он мне пишет останавливается и выдает ошибку:
bad request


кто тебе выдает такую ошибку?

И вообще. Ну блин, ну почему нельзя самому разобраться. Полез я на твою http://editorial.rostov.tele2.ru/?page=tele2rov_sms&t2page=servises_sms

Указываешь имя апплета, http://www.beeonline.ru/servlet/send/sms/

А я вот посмотрел исходный код странички, там такое:



Тебе же нужно указать путь к скрипту, а не путь к странице!!!

Значит, адрес аплета у тебя http://rocc.ru/cgi-bin/sms33.cgi

вообще на левом сайте, на этом твоем http://editorial.rostov.tele2.ruтолько форма лежит...


Atomik   (2004-03-24 10:37:00) [6]

Спасибо, я разобрался - все получилось.


Verg   (2004-03-24 00:54:00) [7]

Хм. Обижаться, значит...

s1 - у тебя что ?
Хиде ты информацию из s1 собирался отправить серверу (хост которого ты назвал оскорбитьлными для ClientSocket-а префикс-суффиксными обрамлениями типа http:// и /) ?
Насколько я вижу, серверу ты собрался передать только длину s1, чем ты его очень сильно разочаруешь, даже если внемлешь "информативному и дельному" моему совету, и TCP-коннект с ним все-таки состоится.
Запрос к http серверу состоит из двух частей - заголовок (Header) и тело (Content), разделенных между собой пустой строкой (заметте - и ответ сервера клиетну тоже). В принципе, Content может и отсутствовать вовсе, как, например, чаще всего бывает в запросах типа GET.
Но у тебя - POST. И все данные, что ты хочешь адресовать форме должны быть заключены в Content - то, что после Header, отделяясь от него пустой строкой. Conent, если он вообще присутствует (о чем говорит ненулевое поле Content-Length в заголовке), должен, просто обязан содеражат кол-во байтов (символов) точно равное Content-Length. Ни больше, ни меньше.
Мало того, он должен быть специальным образом закодирован, а имеено так, чтобы не содержать спец-символов контента (&, =, например) в значениях его полей.
А для этого, в свою очередь, надо знать способ этой кодировки, принятый не помню, то ли в протоколе http, то ли в MIME. Content-Length, тем временем, должен указываться размером вместе с накладными расходами на эту кодировку....
Еже пара - тройка десятков "тонкостей" (!), описанных в паре-тройке десятков RFC и твой HTTP клиент будет как "взрослый".
Там еще может быть прокси, и со своим способом авторизации, а еще авторизация может быть и у самого (Усама, Блин) веб-сервера...

Слушай, я уже устал....


Atomik   (2004-03-23 23:11:00) [8]

Спасибо за информативный и дельный совет :(


Verg   (2004-03-23 23:01:00) [9]

Брось ты эти http-формы, потренируйся пока "на тряпочных" - возьми, попробуй сконнектится с любым SMTP сервер, да хоть с mail.ru...

Сколько раз говорено - "Рясу в джинсы не заправляют, а в конце молитвы говорят Аминь, а не п....ц".
Так и свойство host предназначено для имен хостов, а не для URL-ев.

Понимашь разницу между ' http://www.rostov.tele2.ru/' и 'www.rostov.tele2.ru', нет ?
Может сначала на "тряпочных" потренируешься? А потом уже HTTP, FTP, и проч...?


Atomik   (2004-03-23 22:31:00) [10]

Установил я Клиент сокет :)) Переделал так:
procedure TForm1.Button1Click(Sender: TObject);

begin
ClientSocket1.host:=' http://www.rostov.tele2.ru/';
clientsocket1.Port:=80;
clientsocket1.Active:=true;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
s1:='deferto=&adv_year=&send=send&confirm_key=D1qFhsBdtZ&confirm_code=7284&destination_number_from=ordinary&network_code  =6&ph  one=5811808&message=body&mlength=152&phone_answer_number=';
S := 'POST http://editorial.rostov.tele2.ru/?page=tele2rov_sms&t2page=servises_smsHTTP/1.0'+#13#10+
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'+#13#10+
'Accept-Language: ru'+#13#10+
'Content-Type: application/x-www-form-urlencoded'+#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'+#13#10+
'Content-Length: '+inttostr(length(s1))+'#13#10'+
'Connection: Keep-Alive'+'#13#10'+
'Cache-Control: no-cache'+'#13#10#13#10'+
'phone=3465424&message=asd';

ClientSocket1.Socket.sendtext(S);

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
begin
clientsocket1.Active:=false;
end;

end.


На что я получаю такое: "Windows socket error: затребованное имя допустимо и оно найдено в базе данных, но для имени отсутсвуют связанные с ним данные, который были разрешены для него(11004), on API 'Asyc Lookup"
Я блин матом ругаться уже хочу :)))
Народ, кому не влом попробуте у себя скомпилить, плз!! Очень хочется её сделать :)


Verg   (2004-03-23 21:36:00) [11]

Но больше всех "номеров" мне понравился вот этот

> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1073812488&n=4


....в цирк после этого больше не пойду - не за чем.
:)


Verg   (2004-03-23 21:29:00) [12]


> Но в дельфи 7 вроде нет компонента clientsocket


Ты будешь смеяться, но вопрос "как вернуть TClientSocket в Delphi7" задается на этом форуме раз по 10-ять на неделю.

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1079741156&n=4
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1078671071&n=4
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1078771733&n=4
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1073812488&n=4
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1078848315&n=4

И т.д и т.п. и зае. и вообще...


Atomik   (2004-03-23 21:09:00) [13]

http://delphi84.valuehost.ru/cgi-bin/forum.pl?id=1075556382&n=4
вот тут в принципе описывается, что делать. Но в дельфи 7 вроде нет компонента clientsocket


Atomik   (2004-03-23 21:02:00) [14]

Нет, не в этом дело :(
Вот смотри, что выдает:
'HTTP/1.1 400 Bad Request'


Piter   (2004-03-23 20:10:00) [15]

И вообще

for i:= 0to memo1.Lines.Count+1???

Может все таки to memo1.Lines.Count - 1?


Atomik   (2004-03-23 20:09:00) [16]

Все так, как ты написал делаю. :)))
Когда я жму Ctrl+F9 и выполняется код отправки он мне пишет останавливается и выдает ошибку:
bad request
???
Вот ещё вопрос как надо заполнять поля хост и реферер? Я правильно сделал?


Piter   (2004-03-23 19:55:00) [17]

Ну тут так сложно сказать... экспериментировать за тебя я не буду, конечно... но кое какие соображения выскажу:

1) http://editorial.rostov.tele2.ru/?page=tele2rov_sms&t2page=servises_sms- правильный URL? Точно? Как определил?

2) У тебя передается P_msg. А оно по правилам заполнено? Ты прочитал из моего предыдущего поста:

Да, еще один пункт, нельзя передавать значение параметров по русски. Ты наверное видел как они выглядят, типа '%CC%E0%F1%F2%E5%F0%E0+%C4%E5%EB%FC%F4%E8' - это означает "Мастера Дельфи"

Для перевода русского текста в нужные символы используй:

function EncodeContent(const msg : String) : String;
var
  I : Integer;
begin
  Result := '';
  for I := 1 to Length(msg) do begin
      if msg[I] = ' ' then
          Result := Result + '+'
      else if msg[I] in ['a'..'z', 'A'..'Z', '0'..'9'] then
          Result := Result + msg[I]
      else
          Result := Result + '%' + IntToHex(ord(msg[I]), 2);
  end;
end;


В твоем случае, например:

P_msg:= 'Это тестовое SMS';
P_msg:= EncodeContent(P_msg)


3) К теме не относится, но вместо

fcontent:='';
 for i:=0 to memo1.Lines.Count+1 do
 fcontent:=fcontent+' '+memo1.Lines[i];


наверное, можно просто написать

fcontent::= Memo1.Text


Atomik   (2004-03-23 12:50:00) [18]

Вот и появился вопрос:
Задача: послать смс с сайта:

procedure PostData(P_phone_number, P_msg: String);
var
 MemResponse: TStringStream;
 MemSource: TStringStream;
begin
  FResult:='';
  FContent:='phone='+P_phone_number+'&'+'message='+ P_msg+'#10';
  MemResponse:=TStringStream.Create('');
  MemSource:=TStringStream.Create(FContent);
  IdHTTP1.Post(' http://editorial.rostov.tele2.ru/?page=tele2rov_sms&t2page=servises_sms',MemSource,MemResponse);
  FResult:=MemResponse.DataString;
  MemSource.Free;
  MemResponse.Free;
end;
var
  i:integer;
  f:textfile;
begin
  fcontent:='';
  for i:=0 to memo1.Lines.Count+1 do
  fcontent:=fcontent+' '+memo1.Lines[i];
  PostData(edit1.Text, fcontent):
  assignfile(f,'test.txt');
  rewrite(f);
  writeln(f,fresult);
  closefile(f);

end;


Вот этот код не работает: bar recquest

В полях IDhttp1 я записал:

Host: http://www.rostov.tele2.ru/
ProtocolVersion: pv1_1
в [+]Request:
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */*
Referer: http://editorial.rostov.tele2.ru/?page=tele2rov_sms&t2page=servises_sms
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: http://www.rostov.tele2.ru/

Подскажи, что не так делаю?


Atomik   (2004-03-23 11:35:00) [19]

Спасибо за подробный ответ! Именно это я и хотел сделать, теперь буду пытаться. Если что - спрошу ещё :)


VMcL   (2004-03-23 01:33:00) [20]

>>Atomik  (22.03.04 22:41)

TIdHTTP
?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо