![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Общение с http формами. [D7, WinXP]
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
?