| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > IdHTTP -> передача параметров скрипту |
| Автор: inside 12.7.2006, 13:02 | ||
| Привет! Я отправляю HTTP запрос из приложения на Delphi, которое является клиентом на cgi -скрипт на Perl. Запрос имеет аргументы name - имя файла и login - имя пользователя. Нужно, чтобы скрипт переместил файл name в папку ../login/ которая уже была создана. Для перемещения файлов я использую функцию move модуля File::Copн: move("../Papka/$in{name}", "../$in{login}/$in{name}"; print "Content-type: text/html\n\n"; #------------------------------------------------------------------------------- Проблема в том, что файл не копируется! Если в строке браузера вызвать скрипт - всё ок! Но если вызывать из Delphi (используется компонент Indy), то файл ПРОСТО не копируется, хотя АБСОЛЮТНО совпадают как запросы, так и функции move. Привожу выдержку из лог-файла: 83.237.63.58 - - [11/Jul/2006:23:42:34 +0400] "GET /cgi-bin/move.cgi?name=power.mp3&login=hitman HTTP/1.1" 200 5 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" - из браузера 83.237.63.58 - - [11/Jul/2006:23:43:04 +0400] "GET /cgi-bin/move.cgi?name=power.mp3&login=hitman HTTP/1.1" 200 5 "-" "Mozilla/3.0 (compatible; Indy Library)" - из Делфи как видно, запросы одинковы, но в первом случае файл копируется, во втором - нет. Очень прошу Помочь. Заранее спасибо! Код на Делфи такой:
Очень прошу помочь! |
| Автор: Snowy 12.7.2006, 13:12 | ||
Добавлено @ 13:13 Не может быть одинаковых GET запросов, если ты из браузера отправляешь GET, а из дельфи POST |
| Автор: inside 12.7.2006, 13:23 |
| Из Делфи отправляю с помощью Post. В логах был Get - потому что пробовал и Get-ом и Post-ом. Всё равно НЕ РАБОТАЕТ. Snowy - resp := IdHTTP1.Post('http://adres/cgi-bin/move.cgi',LoginInfo,Response); а Response - забыл вставить в список переменных? Как быть? ЗЫ: Точнее Reponse там вообще не нужен =) |
| Автор: Snowy 12.7.2006, 13:41 | ||
| Угу. Забыл убрать. Попробуй так:
|
| Автор: inside 12.7.2006, 13:56 |
| - я там их такой функцией копирую. Уже всё перепробовал. |
| Автор: Snowy 12.7.2006, 14:06 |
| Причем тут кодировка, если ты не используешь ни русских символов, ни пробела. Попробуй логировать в файл то, что получает cgi скрипт и сравнить разницу. И какую строку ты пишешь в браузере, что у тебя всё проходит? |
| Автор: inside 12.7.2006, 16:06 |
| В файл писал лог - сохранял запрос - они в точности одинаковы, если отправлять из Делфи или из браузера. Из браузера я просто пишу http://www.adress.ru/cgi-bin/move.cgi?name=filename&login=nickname И всё копирует. Уже была мысль вызвать браузер из проги, а выходным данным скрипта послать комманду закрытия окна, так что оно будет открыаться и сразу закрываться. Но это конечно криво. Надо разобраться почему не копирует. |
| Автор: Snowy 12.7.2006, 16:19 |
| Ну, если запросы идентичны, значит дело не в дельфи, а в скрипте. Может там проверка на клиента идет... Попробуй прописать строку клиента, как у IE. |
| Автор: inside 12.7.2006, 16:41 |
| 83.237.63.56 - - [12/Jul/2006:17:37:15 +0400] "GET /cgi-bin/move.cgi?name=demon.mp3&login=miracle HTTP/1.1" 200 5 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" (из программы - файл не копируется) 83.237.63.56 - - [12/Jul/2006:17:37:34 +0400] "GET /cgi-bin/move.cgi?name=demon.mp3&login=miracle HTTP/1.1" 200 5 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" (из браузера - файл копируется удачно) Люди, выручайте - что делать? |
| Автор: Snowy 12.7.2006, 16:47 |
| Права тут не при чем. Запрос он и есть запрос. Разве что у тебя к скрипту не напрямую обращается... Тогда поставь HandleRedirect в true. |
| Автор: inside 12.7.2006, 16:56 |
| Изменил - ноль.... |
| Автор: Snowy 12.7.2006, 17:05 | ||||
|
| Автор: inside 12.7.2006, 17:20 | ||||
Вот так сделал =)
Опять же - если браузер - вижу ok, если прога - shit! Хм... уже что-то.... хотя сама функция вот такая:
Пойди разберись, где именно она ноль вернула |
| Автор: Snowy 12.7.2006, 17:35 |
| нет, пусть вернёт именно "../$in{login}/$in{name}\n\n" Может именно тут разница зарыта. Добавлено @ 17:36 И сниферни или пропусти через мапер весь заголовок запроса, а не только GET |
| Автор: inside 12.7.2006, 17:53 | ||||
это я уже проверял - сохранял в лог, как выглядят функции move при подстановке значений переменных - абсолютно одинаково.
Как это сделать - я не знаю - объясни - обязательно займусь |
| Автор: Snowy 12.7.2006, 18:06 |
| Вот код маппера. http://forum.vingrad.ru/index.php?showtopic=89811&view=findpost&p=689298 Настрой его на подключение к серверу. Хост - adres, порт 80. В браузере и программе настрой прокси: хост - localhost, порт - порт мапера. В указанный файл будет сброшен весь траффик. Если и есть разница в запросах - увидишь её в файле. |
| Автор: inside 12.7.2006, 18:13 | ||
вот здесь выдается 0... Для меня только этот код сложноват. Кто-нибудь понимает - где именно ошибка? (точнее не ошибка - это move из File::Copy, а почему не получается скопировать?)
|
| Автор: inside 12.7.2006, 18:36 |
| Snowy, в Мапере поставил - хост - Айпи сервера, порт -80 В Браузере И Программе - хост- localhost, порт - 80. всё правильно? Браузер вообще ничего не отображает - ошибка 501. Программа вроде подключается, но логи не пишет. Где я накосячил? |
| Автор: inside 12.7.2006, 20:26 |
| |