| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Метод POST |
| Автор: Zlo 31.10.2004, 18:22 |
| Люди тут проблема такая назрела: Нада передовать скрипту на сервере данные типа логин,пароль,сайт,аська и т.д Я для этого использую метод Post компанента TNMHTTP (Дельфя 6) Но ничего у меня неполучается. Посмотрел с помощью специальной проги как это делает ХТМЛ страница Вот что показала прога: Url:http://www.server.ru/phpBB2/profile.php?sid=eff213e8269595b0c6e0d85997c36eb1 PostData:username=Zlo-2&[email protected]&new_password=123&password_confirm=123&icq=268310&aim=&msn=&yim=&website=zlo-raspisanie.narod.ru&location=&occupation=&interests=&signature=%D0%E0%E7%F0%E0%E1%EE%F2%EA%E0+%EF%F0%EE%E3%F0%E0%EC%ED%EE%E3%EE+%EE%E1%E5%F1%EF%E5%F7%E5%ED%E8%FF%21&viewemail=0&hideonline=0¬ifyreply=0¬ifypm=1&popup_pm=1&attachsig=1&allowbbcode=1&allowhtml=0&allowsmilies=1&language=russian&style=1&timezone=3&dateformat=D+M+d%2C+Y+g%3Ai+a&mode=register&agreed=true&coppa=0&submit=%CE%F2%EF%F0%E0%E2%E8%F2%FC Referer:http://www.server.ru/phpBB2/profile.php?mode=register&agreed=true Насколько удалось выяснить неполучается нормально послать запрос из за третьей строки (Referer) Народ помогите! как сделать чтоб с методом пост еще и отпровлять Referer? |
| Автор: z-END 31.10.2004, 19:24 | ||
Чет несовсем вопрос понял, но может быть вариант такой что
|
| Автор: p0s0l 31.10.2004, 19:31 |
| К примеру, в TIdHTTP есть свойство Request, в нём можно поменять Referer (IdHTTP1.Request.Refererer := 'http://www.server.ru/...т.д.') Потом уже делаем IdHTTP1.Post (...); Посмотри, может в NMHTTP есть подобное ?... ЗЫ: реферер - это URL страницы, с которой происходит запрос... (Т.е. на какой странице нажали линк, ведущий к твоей странице)... |
| Автор: Zlo 4.11.2004, 03:32 |
| А подскажите как с помощью компонента TIdHTTP послать вот такой запрос username=Zlo-2&[email protected]&new_password=123&password_confirm=123&icq=268310&aim=&msn=&yim=&website=zlo-raspisanie.narod.ru&location=&occupation=&interests=&signature=%D0%E0%E7%F0%E0%E1%EE%F2%EA%E0+%EF%F0%EE%E3%F0%E0%EC%ED%EE%E3%EE+%EE%E1%E5%F1%EF%E5%F7%E5%ED%E8%FF%21&viewemail=0&hideonline=0¬ifyreply=0¬ifypm=1&popup_pm=1&attachsig=1&allowbbcode=1&allowhtml=0&allowsmilies=1&language=russian&style=1&timezone=3&dateformat=D+M+d%2C+Y+g%3Ai+a&mode=register&agreed=true&coppa=0&submit=%CE%F2%EF%F0%E0%E2%E8%F2%FC |
| Автор: _hunter 4.11.2004, 12:51 |
| пользуйся поиском: http://forum.vingrad.ru/index.php?showtopic=31596 |
| Автор: Zlo 4.11.2004, 19:06 | ||||||
| Хорошо, допутим Процедура пост выглядит так
так вот Url - это адрес скрипта которому передаются данные, а что такое
и
Скажите плиз! |
| Автор: _hunter 4.11.2004, 21:02 | ||
IMHO в справке все понятно написанно:
|
| Автор: p0s0l 5.11.2004, 02:01 | ||||||
| Source - данные запроса. AResponseContent - ответ с сервера (напр., html-страница или файл). При методе Post в запрос к серверу еще входят дополнительные данные (Source). Это может быть какой-то файл (для закачки на сервер). Но можно и параметры передавать (не всегда), например так:
А в твоём случае надо сделать так:
А если нет Post-данных, то проще так сделать:
|
| Автор: Zlo 5.11.2004, 02:32 |
| _hunter Блин еслиб в справке понял я б сюды неписал. Ну что ты за человек. p0s0l Пасиба, очень подробненько, как раз для ламеров |
| Автор: Zlo 6.11.2004, 16:41 | ||
p0s0l
А зачем там s? В нее наверно надо чтото записать, если да то что? |
| Автор: _hunter 6.11.2004, 16:52 |
| вопрос интересный судя по записи, имелся в виду метод Get и тогда достаточно такого: Memo1.Text := IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php?username=Zlo-2&[email protected]&new_password=123...'); Zlo, а что именно ты не понял в справке? |
| Автор: Zlo 6.11.2004, 17:19 | ||
| _hunter В справке? Да там все на ангилйском, а у меня с ним неочень p0s0l Вот сделал как ты написал
А дельфя говорит: [Error] Unit1.pas(88): String literals may have at most 255 elements Походу строка неможет быть больше 255 символов И чего теперь делать? |
| Автор: _hunter 6.11.2004, 17:27 |
| именно поэтому создатели того сайта ( с которого форма ) решили использовать метод POST. тебе остается делать то же самое |
| Автор: Zlo 6.11.2004, 17:56 |
| _hunter Тоже самое это что? |
| Автор: _hunter 6.11.2004, 18:02 | ||
| использовать метод POST немного модифицирую код p0s0l:
|
| Автор: p0s0l 6.11.2004, 20:07 | ||||
Ты скажи конкретнее, какой запрос тебе надо послать ? В большинстве случаев можно обойтись:
|
| Автор: _hunter 6.11.2004, 22:41 |
| не получится ( у него запрос для этого слишком длинный ) |
| Автор: p0s0l 6.11.2004, 23:17 | ||||
Тогда, как вариант, можно разбить строку так:
Добавлено @ 23:18 А лучше делай Post, как уже написали... |
| Автор: Zlo 7.11.2004, 00:35 | ||||
| _hunter в запросе параметры перечисляится через '&' тогда писать наверное нада так:
что скажешь? я прав? И еще какнибудь можно посмотреть хтмл страницу после пост запроса в Memo? А то если написать вот так:
Дельфя выдает ошибку что типы несовместимы _hunter Попробавал сделать как ты предложил, все таже фигня Только теперь это идет как исключительная ситуация Если нужен текст сообщения об ошибке то могу написать. |
| Автор: p0s0l 7.11.2004, 19:06 | ||
|
| Автор: p0s0l 7.11.2004, 19:42 | ||||||
Сделай так:
Тебе надо разобраться, что такое перегрузка функций, чтобы не путаться... |
| Автор: Zlo 8.11.2004, 03:41 |
| p0s0l Сделал как сказал. Ошибка с типами пропала но всеравно когда начинается выполнение функции POST программа вылетает с ошибкой. |
| Автор: p0s0l 8.11.2004, 10:57 |
| Какая ошибка ? |
| Автор: Zlo 8.11.2004, 14:43 |
| p0s0l Вот это выдает если запускать не из под делфи ИДЕ: HTTP/1.1 302 Found. А вот это если из под делфи: Project Project1.exe raised exception class EidHTTPPritocolException with message 'HTTP/1.1 302 Found'. Process stopped. Вобщемто одно и тоже. |
| Автор: p0s0l 9.11.2004, 00:25 |
| Шо за ошибка такая ? Вроде типа редиректа, я так понял... Ты можешь дать полный урл к этой странице ? Или показать всё содержимое Memo1 (куда ты пишешь ответ с сервера)... Должен быть указан новый URL - его и надо юзать будет... Но в IdHTTP встроена поддержка редиректов, попробуй поставить свойство HandleRedirects в True (по умолчанию False), и RedirectMaximum поставь хотя бы 1 (по умолчанию стоит 15, так что если не трогал - то не трожь |
| Автор: Zlo 9.11.2004, 00:36 |
| p0s0l Урл? вот держи http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true Но вроде редиректа нет. А в меме нечего не записывается, он пустой остается, и ошбка вылезает |
| Автор: p0s0l 9.11.2004, 07:25 | ||||||
|
| Автор: Zlo 9.11.2004, 11:35 | ||
| p0s0l извени меня конечно за возможно тупые вопросы но как это сделать:
??? |
| Автор: _hunter 9.11.2004, 14:06 | ||||||||
| ух ты сколько тут наотвечали... что-то уведомление об ответе глючит.
та и должно быть и перегнат его в тот же StringList можно методом TStrings LoadFromStream()
делается это так:
finally пустой потому как в принципе всю обработку можно делать с помощью ResponseCode |
| Автор: p0s0l 9.11.2004, 14:43 | ||||
| Всё-таки, дай ту ссылку, которая глючит, а не эту: http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true Чтобы получше разобраться с ошибкой, делай так:
Добавлено @ 14:50
|
| Автор: p0s0l 9.11.2004, 14:54 | ||||
| ЗЫ: классификация хттп-ошибок:
|
| Автор: Zlo 9.11.2004, 18:32 |
| p0s0l Сылка которую я дал http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true это ссылка на форму которую нужно передать скрипту передается форма методом пост передается скрипту http://www.nef.ru/phpBB2/profile.php Кстати когда я разрешил редирект то ошибка пропала Но чего-то всеравно неудается провести регистрацию Я щас посмотрю может чего с параметрами напутал |
| Автор: Guest 9.11.2004, 19:33 |
| Ну теперь другая проблема! Пост посылается но некакой регитрации не происходит Просто перекидывает на главную страницу и фсе Чего за чертовщина? |
| Автор: p0s0l 9.11.2004, 20:33 |
| К сожалению, в PHP я не особо шарю, но, насколько я знаю, есть такое понятие "сессия". И в параметрах запроса нужно указывать ID текущей сессии. Если ты там пишешь ID какой-то старой сессии (например, списал запрос, который твой IE посылает серверу, и вручную потом этот запрос 1:1 посылаешь), то у тебя будет облом... Т.е. по-нормальному, надо: 1) зайти, на страницу регистрации (сделать IdHTTP1.Get('http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true') 2) в результате получишь SID (его можно получить из html, который получаешь с помощью IdHTTP1.Get) Можешь получить его так: Ищешь подстроку: <form action="profile.php? Далее после неё сразу же идёт типа такого: sid=38ed0bbb49f900a798524b211055a1fb" method="post"> Отсюда SID получай... 3) Теперь уже посылай запрос с заполненной формой и с указанием в параметрах этого SID'а |
| Автор: Zlo 9.11.2004, 22:13 |
| Спасибо про ид я знаю! Посмотри программу Mini-Browser очень классная вещь, скачать можно на web-hack.ru (это не реклама просто ссылку на файл не могу дать позволяет смотреть каким методом и куда посылыются данные Вот эта прога и показывает мне вот такой адрес куды посылать данные http://www.nef.ru/phpBB2/profile.php?sid=39bd917c94850c2dfb4a13d7b99e574d я пишу в проге так Memo3.Lines.Text:=idHTTP1.Post('http://www.nef.ru/phpBB2/profile.php?sid='+sid,s); sid - я его доэтого выкарчевываю из страници и всеравно некакой регистрации не происходит просто перекидывает на главную страницу вот немогу понять, че такое??? |
| Автор: p0s0l 10.11.2004, 00:13 | ||
Вот так всё работает...
|
| Автор: Zlo 10.11.2004, 02:52 |
| p0s0l Скланяю голову! Респект тебе и все такое. Я понял в чем ошибка, спасибо тебе p0s0l!!!! |
| Автор: p0s0l 10.11.2004, 12:18 | ||
|
| Автор: _hunter 10.11.2004, 15:15 | ||||
скорее всего в этом:
и непонимании этого:
|
| Автор: Zlo 10.11.2004, 18:05 | ||||
_hunter
нет не в этом, про сид я знал ссамого начала как прогу начал делать! недоглядел я с параметрами немнжко и со значением параметров p0s0l вот так помоему писать нельзя
Потому как русские буквы должны преобразовываться в какойто там вид.... Вот в 6 дельфи для этого был компонент NMURL с закладки FastNet может в 7 версии найдется замена? |
| Автор: p0s0l 10.11.2004, 19:15 | ||
Можно так:
|
| Автор: _hunter 11.11.2004, 11:31 |
| куда-то перекодируется... ты приведи тлгда пример оригинальной подписи ( чтоб определить куда оно кодируется ) ( есть подозрение что в Base64 -- тогда тот же Indy ( а именно IdBase64Encoder ) поможет ) |
| Автор: fuckerok 15.11.2004, 08:54 | ||||
| Люди у меня такая пробелма не хочет форму посылать на сервер в интернете ошибку выдаёт я вот хочу делать так
И мне ошибку выдаёт. И в HTTPLOG никаких обращений А если делаю для локального сервера, то всё работает Вот например
В этом случае всё работает, прожек посылает 20 запросов серверу (видно по http логам) Помогите разобраться. В чём проблема? |
| Автор: p0s0l 15.11.2004, 17:08 | ||||
PS: и у меня нормально твой запрос на oldchat.mail.ru отправился... Правда написали, что доступ для моего IP закрыт из-за флуда |
| Автор: fuckerok 16.11.2004, 07:24 | ||||
| p0s0l Сам не пойму была ошибка, запрсов не было Наверно руки кривые Единственное, что отлечалось у меня был другой провайдер, я тестировал на PTN. Сейчас у меня обычный провайдер и всё работает, никаких ошибок.
Это я от руки добросал, ошибка точно не из-за этого была, в коде у меня правильно написанно, да и не скомпилилось бы она так, как я вначале написал.
Надеюсь ты не обидишся на меня за то что не сможешь какое-то время посидеть в детском чате |
| Автор: Kondragor 21.11.2004, 03:14 | ||
Поскажите плиз и мне тоже. Вот такой запрос - https://loginnet.passport.com/ppsecure/post.srf?lc=1033&id=2&tw=20&fs=1&cbid=24325&da=passport.com&kpp=2&svc=mail&msppjph=1&login=my_mail&domain=hotmail.com&passwd=my_password&sec=&mspp_shared=&padding=x позволяет через браузер зайти сразу на страничку проверки почты. А как мне сделать это через IdHTTP1 ? тем более когда я обращаюсь к нему так
выдается ошибка Intercept value is not valid. Делаю место https:// - http://. Пишет 403 Forbidden. Подскажите плиз как можно таким образом залогиниться на почту. p.s. сорри если ступил где, я с этими вещами первый раз работаю. |
| Автор: _hunter 21.11.2004, 22:55 | ||
|
| Автор: Kondragor 22.11.2004, 01:10 |
| А нельзя ли объяснить что с этим делать? |
| Автор: Балбес 15.5.2005, 11:37 | ||||
скомпилировал этот пример
Сообщение отправляется, но вылазит ошибка
Как ее обойти, скажите |
| Автор: Балбес 16.5.2005, 11:59 |
| адрес сменил на свой, сообщение отправляется, но вылазит ошибка |
| Автор: _hunter 16.5.2005, 12:32 |
| а ты уверен что на этом www.server.ru ждут твоего сообщения? |
| Автор: Балбес 16.5.2005, 19:57 | ||||
_hunter
|
| Автор: _hunter 16.5.2005, 20:04 |
| ну тогда ты уверен что на "своем" адресе твое сообщение ждут? + поставь сниффер да глянь что/куда идет ( и идет ли )[s] ++ что значит сообщение отправляется? ( когда, в таком случае ошиька появляется? ) |
| Автор: lamos123456 5.11.2006, 14:08 | ||||
Вот попробовал написать по вашему примеру авторизацию но выдаёт ошибку в коде
Вот Post запрос который выцепил снифер
Форум ExBB |
| Автор: Matematik 5.11.2006, 16:39 | ||
Обрати внимаение на код
|
| Автор: Zlo 6.11.2006, 02:28 |
| lamos123456, переменную s объяви как TStringList |
| Автор: lamos123456 6.11.2006, 12:42 |
| Ok... спасибо! |
| Автор: malor 24.4.2007, 12:04 | ||||
Мне нужно отправить пару строчек методом POST, а затем прочитать ответ от сервака:
Пошаговая отладка показывает, что сбой происходит на строке ResultQuery := HTTP.Post('https://192.168.0.100/check/index.cgi', Query); Что делать ? Где логи смотреть ?.. Delphi 7, WinXP |
| Автор: aktuba 24.4.2007, 12:35 | ||
что означает, что для работы с HTTPS необходимы дополнительные DLL. Читаем справку + пользуемся поиском. Обсуждалось подобное очень много раз... |
| Автор: Gwire 1.7.2008, 19:10 | ||||||
Здравствуйте. У меня утановлен Apache2.0. Файл по адресу http://localhost/index.php содержит следуюший код:
В Delphi6 пишу код:
В результате в Memo1 заносятся следуюшие данные
Как видно POST-данные небыли получены сервером для обработки. Из этого следует что либо пременная "S" имеет не правильный формат строк (var_post=value_post), либо функция "IdHTTP1.Post()" работает некорректно, либо я затрудняюсь прокоментировать этот "баг". Хотелось-бы разобраться... |
| Автор: Gwire 1.7.2008, 19:48 | ||
Розобрался.
|
| Автор: Sharky 30.1.2009, 17:47 | ||||
| Здравствуйте у меня такая проблема не могу сделать запрос на Https вот код страницы
отсюда для себя я вынул след информацию:
"text" name="login" поле логина "password" name="password" поле пароля action='/?lang=ru вот как я пытаюсь сделать запрос
мой аутпост говорит что приложение запрашивает исходящее соединение LocalHost далее моё приложение просто виснет несколько сообщений выше я видел что для Https нужны какие то Dll ки но я не знаю откуда мне их взять в гугле смотрел . Не представляю что мне делать.помогите мне пожалуйста . |