Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Либо я чего-то не понимаю, либо одно из двух...

487
22 сентября 2003 года
ddnh_bc
301 / / 16.09.2003
Привет всем куль-программерам!

Люди добрые, шибко хелп нужен!
Проблема в следующем - никак не могу разобраться с методом POST компонента TNMHTTP. Подскажите - в каком виде ему нужно запихивать параметр PostData?

Поясню: к примеру url - site.ru/getmsg.php3
хаваются три параметра:
author,subject,body.

InputFileMode и OutputFileMode = false;

Если я делаю вызов метода POST с параметрами:
_internet->Post
("www.site.ru/getmsg.php3? author=1&subject=2&body=3",
""); - то все срабатывает просто изумительно.

а при попытке: _internet->Post("www.site.ru/getmsg.php3","author=1&subject=2&body=3"); - скрипт срабатывает, но параметры не передаются.

Подозреваю, что я что-то делаю не так в строке PostData. Может еще что-нужно добавить?

Заранее благодарен.
1
22 сентября 2003 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by ddnh_bc

Если я делаю вызов метода POST с параметрами:
_internet->Post
("www.site.ru/getmsg.php3? author=1&subject=2&body=3",
""); - то все срабатывает просто изумительно.

а при попытке: _internet->Post("www.site.ru/getmsg.php3","author=1&subject=2&body=3"); - скрипт срабатывает, но параметры не передаются.

Подозреваю, что я что-то делаю не так в строке PostData. Может еще что-нужно добавить?

Заранее благодарен.


А вот так не пробовал ("www.site.ru/getmsg.php3","?author=1&subject=2&body=3");?

487
22 сентября 2003 года
ddnh_bc
301 / / 16.09.2003
Пробовал. Не работает!
1
22 сентября 2003 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by ddnh_bc
Пробовал. Не работает!



Выпил пива стало легче...:)
Что по этому поводу думает борлад:


void __fastcall TForm1::Button1Click(TObject *Sender)
{
NMHTTP1->Get(Edit1->Text);
}

When Button1 is clicked, the Get method is used to retrieved the document at the address specified by Edit1. Both the document body and the document header are retrieved.


void __fastcall TForm1::Button6Click(TObject *Sender)
{
AnsiString S;
if (InputQuery("Post Data Required", "Input data to Post", S))
NMHTTP1->Post(Edit1->Text, S);
}

When Button6 is clicked, the InputQuery function is used to retrieve the data to be posted. If the Ok button is clicked, the data that was input is posted using the Post method to the document specified by the address in Edit1.

Вобще-то если я не ошибаюсь, то метод который используешь ты - это именно GET.Потому у тебя он и работает без второго параметра. Метод POST должен получить другие данные на входе...:) И скрипт должен знать как с ними работать.

1
22 сентября 2003 года
kot_
7.3K / / 20.01.2000
То есть строка твоя должна выглядеть примерно таким образом:
"author.1&sabject.2&body.3"
если уж так тебе хочется делать это через POST.
ессественно скрипт на сервере должен смочь что то типа:

@formfields=split /&/,$query;
foreach(@formfields){
if(/^author=(.*)/){$author= urldecode($1);}
if(/^sabject=(.*)/){$sabject = urldecode($1);}
if(/^body=(.*)/){$body=urldecode($1);}
487
27 сентября 2003 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by kot_
То есть строка твоя должна выглядеть примерно таким образом:
"author.1&sabject.2&body.3"
если уж так тебе хочется делать это через POST.
ессественно скрипт на сервере должен смочь что то типа:

@formfields=split /&/,$query;
foreach(@formfields){
if(/^author=(.*)/){$author= urldecode($1);}
if(/^sabject=(.*)/){$sabject = urldecode($1);}
if(/^body=(.*)/){$body=urldecode($1);}



Попробую зайти с другой стороны:

Кусок HTML:
<form method=POST action=www.site.ru/getmsg.php3>
<input type=text name=author>
<input type=text name=subject>
<textarea name=body>
<input type=submit name=bsubmit>


Кусок PHP:
$mess = "Автор: $author\n";
$mess.= "Тема: $subject\n";
$mess.= "Сообщение: $body\n";

mail("myemail@inbox.ru", $subject, $mess, "From: $author")

Все это работает - проверял у себя на сайте.
Более того -

если запускаю билдеровскую прогу и выполняю:
_internet->Post
("www.site.ru/getmsg.php3? author=1&subject=2&body=3",
"");

или

_internet->Get
("www.site.ru/getmsg.php3? author=1&subject=2&body=3",
"");

то мне в почтовый ящик приходит письмо:

From: 1 Subject: 2
Автор: 1
Тема: 2
Сообщение: 3

А вот если я выполняю:

_internet->Post
("www.site.ru/getmsg.php3",
"author=1&subject=2&body=3");
или
_internet->Post
("www.site.ru/getmsg.php3",
"?author=1&subject=2&body=3");
или
_internet->Post
("www.site.ru/getmsg.php3",
"author.1&sabject.2&body.3");
или
_internet->Post
("www.site.ru/getmsg.php3",
"?author.1&sabject.2&body.3");

приходит письмо с таким содержанием:

From: Subject:
Автор:
Тема:
Сообщение:

Вот такие вот пирожки с котятами. Мне скоро прогу сдавать - а на этом месте я подвис качественно. И пока не могу решить сию проблему.

1
27 сентября 2003 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by ddnh_bc


Попробую зайти с другой стороны:

Кусок HTML:
<form method=POST action=www.site.ru/getmsg.php3>
<input type=text name=author>
<input type=text name=subject>
<textarea name=body>
<input type=submit name=bsubmit>


Кусок PHP:
$mess = "Автор: $author\n";
$mess.= "Тема: $subject\n";
$mess.= "Сообщение: $body\n";

mail("myemail@inbox.ru", $subject, $mess, "From: $author")

Все это работает - проверял у себя на сайте.


Я хотел бы обратить твое внимание что, тот кусок скрипта кот. на писан на Перле и служит для определения полей в форме

Цитата:

@formfields=split /&/,$query;


Здесь поля формы разделяются. Т.е. создатся массив
с именем фордфайлдс и в него запихиваются поля и значения из квери.

Цитата:
foreach(@formfields){
if(/^author=(.*)/){$author= urldecode($1);}
if(/^sabject=(.*)/){$sabject = urldecode($1);}
if(/^body=(.*)/){$body=urldecode($1);}


А здесь строки декодируются и обрабатываются. Функция urldecode определена в отдельном модуле и ее задаче я вляется принять переменную и привести к нужному виду.

Цитата:

$mess = "Автор: $author\n";
$mess.= "Тема: $subject\n";
$mess.= "Сообщение: $body\n";


А ты показываешь уже обработанные переменные...
Где декодируются $author и пр.?
Для пиэйчпи должно быть примерно вот так

Цитата:

if($REQUEST_MEDOD == "POST"){
// Здесь идет обработ ошибок и пр.
$author = $form["author"];
mess = "Автор " $author;
//и т.д.
}


Но это не готовая программа - это пример!!!!
Посмотри доки по предаче данных, что является разделителем.

487
28 сентября 2003 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by kot_

Я хотел бы обратить твое внимание что, тот кусок скрипта кот. на писан на Перле и служит для определения полей в форме

Здесь поля формы разделяются. Т.е. создатся массив
с именем фордфайлдс и в него запихиваются поля и значения из квери.

А здесь строки декодируются и обрабатываются. Функция urldecode определена в отдельном модуле и ее задаче я вляется принять переменную и привести к нужному виду.

А ты показываешь уже обработанные переменные...
Где декодируются $author и пр.?
Для пиэйчпи должно быть примерно вот так

Но это не готовая программа - это пример!!!!
Посмотри доки по предаче данных, что является разделителем.



Брррр...
Я конечно не силен в PHP - честно говоря это был мой первый опыт работы с ним, но я написал PHP-шный код именно в том виде, в котором он лежит у меня на сайте. Без дополнительных декодингов. Если хочешь - могу прислать копию. Я воспользовался где-то скачанным примером, который переработал в своих нуждах! Так что писал сюда все так как есть.

487
29 сентября 2003 года
ddnh_bc
301 / / 16.09.2003
Ура!

Проблема наконец решена!
Все дело оказывается было в глюке самого TNMHTTP - руки бы оторвать тому программеру, который этот компонент писал.

Весь прикол в следующем - методом POST можно отправлять данные ТОЛЬКО из файлов! Строки он не хочет хавать принципиально - почему не известно.

Так что приходится поступать следующим образом:
пишем файл params.txt:
author=1&subject=2&body=3

далее:

_internet->OutputFileMode=true;
_internet->Post("www.site.ru/script.php3","params.txt"); - и все работает, блин. Столько времени из-за такой фигни потерял.

Кстати, у кого-нибудь, случайно нет примеров использования Indy компонентов? Всмысле каких-нить демонстрационных исходников - конкретно по компоненту TIdHTTP? А то в сорцах самого билдера эта ценная информация отсутствует напрочь!

Заранее спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог