Форум: "Сети";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизКак послать 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c