Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Как послать php запросы ?   Найти похожие ветки 

 
Фёдор Мегатронов   (2004-07-14 22:12) [0]

Есть форум .. допустим на php ... мне нужно чтобы нажатием одной кнопки я логинился на него, или вписав в окно в своей проге текст - мог запостить его в форуме .

для этого нужны какие-то спецефические компоненты ?

как это проще сделать ?


 
Alexander1966   (2004-07-15 11:35) [1]

Наверно idTelnet

Коннектимся:
 telnet www.rambler.ru 80 <Enter>

Получаем страничку на консоль, ввиде потоков символов
(Броузер просто этот поток обрабатывает и выводит красиво):
 GET /INDEX.HTML  HTTP/1.0 <Enter><Enter>

А теперь заставим выполнить скрипт:
 POST сценарий?параметры HTTP/1.0   общий вид команды
Пример:
 POST /script.cgi HTTP/1.0\n
 Content-length: 5\n                5 символов длина заголовка
 \n
 Test!                              заголовок 5 символов

Я так думаю надо какой либо программой перехватить обращение к серверу (что бы знать что туда посылается), а дальше посылать это самому.


 
SergP ©   (2004-07-16 11:12) [2]

А компонент TWebBrowser тебя не устраивает?


 
VictorT ©   (2004-07-16 18:16) [3]

Вот кусок кода из моего бота для форума, правда на Си.

void PostToForum(CString post, CFile *log1)
{
   DWORD status = 0;
   while (status != 200) {
       Write(log1, "Посылаем ответ\r\n");
       cout << "_Rбл< _¬ Rві_в" << endl;
       CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
       CString strFormData = _T("id=92675&num=3.4&action=reply&client=1&psw=betaalfa&name=");
       strFormData += UrlEncode("VictorT");
       strFormData += _T("&email=&msg=");
       strFormData += UrlEncode(post);
   //    strFormData += post;
       CInternetSession session(NULL, 1, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_DONT_CACHE);
       CHttpConnection* pConnection = session.GetHttpConnection(_T("deep.webm.ru"));
       CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("forum/post.php"));
       BOOL result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
       pFile->QueryInfoStatusCode(status);
       if (status != 200) {
           Write(log1, "Ошибка соединения\r\n");
           cout << "_иЁІЄ  бR_¤Ё-_-Ёп" << endl;
       }
   }
}


 
VictorT ©   (2004-07-16 18:17) [4]

Alexander1966   (15.07.04 11:35) [1]
Я так думаю надо какой либо программой перехватить обращение к серверу (что бы знать что туда посылается), а дальше посылать это самому.

Имхо, можно ничего и не перехватывать, а просто посмотреть в html-коде, как отправляется форма.


 
Фёдор Мегатронов   (2004-07-16 20:30) [5]

задача усложняется тем, что я плохо знаю ПХП ... конечно мне поможет друг 8) .. который знает ПХП .. но не знает делфи ..

спасибо вобщем .. попробую это использовать


 
Фёдор Мегатронов   (2004-07-16 21:00) [6]

тут такая штука получаеться .. что мне просто нужно послать запрос .. потому что вся информация (на пример текст топика) передаёться в нём ...

неужели нельзя как-то просто с этим работать ? хе ... система такая что я могу прсото сэмитировать посылание запроса в строке адреса интернет иксплорера 8) .. перехватив его идентификатор, присвоить строке запрос, и сэмулировать нажатие кнопки ..

но это слишком "через-жопу" ...


 
SergP ©   (2004-07-16 21:19) [7]


> задача усложняется тем, что я плохо знаю ПХП ... конечно
> мне поможет друг 8) .. который знает ПХП .. но не знает
> делфи ..


А какое отношение имеет PHP к Delphi, вернее к твоей задаче?
PHP для такой задачи знать вовсе не обязательно. Кроме того можно даже и не подозревать что есть такая штука как PHP.


 
Фёдор Мегатронов   (2004-07-17 16:00) [8]

короче ктонибудь может привести код отправки ПХП запроса ? и как пиконнектиться к серверу


 
Фёдор Мегатронов   (2004-07-17 16:00) [9]

точнее POST запрос


 
KN771   (2004-07-18 00:36) [10]

Фёдор мегатронов - вот
Пример отправки Post запроса

var
S : TStringList;
begin
S := TStringList.create;
try
S.Add("login=qwerty");
S.Add("text=vvvvvvv");
idhttp1.Post("http://site.com/index.php",S);
except
S.free;
end;
end;end.


 
Фёдор Мегатронов   (2004-07-18 15:40) [11]

тоесть если на пример у меня есть форма и два поля: логин и пароль.

вместо строки http://site.com/index.php" я подставил точный адрес до формы логина ...

но ничего не происходит ...


 
KN771   (2004-07-18 20:48) [12]

Фёдор Мегатронов
Я так понел тебе надо послать логин и пароль
назовём их так login=Фёдор password=123

procedure TForm1.ButtonClick(Sender: TObject); //кнопка
var
S : TStringList;
begin
S := TStringList.create;
try
S.Add("login=Фёдор");
S.Add("password=123");
idhttp1.Post("http://site.com/index.php",S);
except
S.free;
end;
end;end.

//Таким способом мы залогинимся на сайте под логином Фёдор и паролем 123
весь запрос будет такого вида
http://site.com/index.php?login=Фёдор&password=123
Тут всё просто ,ты просто внимательно посмотри на сайте всё что находится после <form
//Может тебе надо в настройках компонента idhttp заполнить слудущее
Host: site.com
Referer: http://site.com/index.php
User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)
Content Length: 200
Connection: Keep-Alive
Accept Language: ru
Accept Encoding: gzip


 
Фёдор Мегатронов   (2004-07-18 21:32) [13]

вот обычно я в строке состояния внизу замечаю надпись
http://site.com/index.php?login=Фёдор&password=123 ...

а на нашем форуме я вижу только
http://site.com/index.php?auth

я ещё поговорю с другом который нам форум писал... но ведь этот запрос можно поидее только в исходниках посмотреть ..

у меня есть они от почти всех движков, но это как-то неудобно


 
mrGrey ©   (2004-07-18 21:59) [14]

Смотри сюда внимательно!!!!
Сам только что разобрался, а потому объяснять буду подробно :)
1. Открываешь свой PHP в ViewSource и ищешь
<form method=post><input type="hidden" name="PHPSESSID" value="4d38d88a0733c9058bbe94c13e29a25fayojelivobkyhhhfeeegcfanni165810" /> // невидимое поле
<table border=0>
<tr>
<td>User name:</td>
<td><input type=text name=username></td></tr> //видимое поле а-ля TEdit
<tr>
<td>Password:</td>
<td><input type=password name=password></td>
</tr>
<tr>
<td colspan=2 nowrap>
Use Auto-login <input type=checkbox checked name=autologin value=1><br>                      //CheckBox
Secure your PHPSESSIONs? <input type=checkbox checked name=ipsec value=1><br>           //CheckBox
<font size="1">(not compatible with some Internet providers)</font>
<br><br>
<input type=submit value="Login" name="submit">
</td>

2. Ложишь на форму IdHTTP (у меня - HTTP)
3. Первая процедура - получение страницы (из-за секретного поля PHPSESSID):
procedure TMainForm.BtnSourceClick(Sender: TObject);
var
 s:string;
begin
     Try S:=HTTP.Get(URLEdit.Text);
     Except ShowMessage("Damned!");End;
     Memo.Lines.Text:=S;
end;


4.Вторая процедура - отсылка POST-пакета:
procedure TMainForm.POSTClick(Sender: TObject);
var s:TStrings;
   str:string;
begin
     S:=TStringlist.Create;
     s.Add("PHPSESSID=4d38d88a0733c9058bbe94c13e29a25fh...");
     s.Add("username=VANYA");
     s.Add("password=TRAKTOR");
     s.Add("autologin=0");
     s.Add("ipsec=1");
     try str:=HTTP.Post(URLEdit.Text,s);
     except s.Free;
     end;
     MSource.Lines.Text:=str;
end;


Попробуй.
Удачи.
И спасибо что создал тему - я из нее много почерпнул. Напишешь вышло, не вышло - ладушки???


 
Фёдор Мегатронов   (2004-07-18 22:38) [15]

к спасибо буду разбераться



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
14-1094796322
dr Tr0jan
2004-09-10 10:05
2004.09.26
Функция "Grad"


3-1093605024
Zhekson
2004-08-27 15:10
2004.09.26
потеря информации


3-1093420285
andrey__
2004-08-25 11:51
2004.09.26
TADOQuery редактир. уже изменённой записи!


14-1094813074
Hint
2004-09-10 14:44
2004.09.26
Проблема с компьютером


1-1094994265
Antonmm
2004-09-12 17:04
2004.09.26
Рисунки в DLL