Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> curl: при отправке формы в ответе - страница, с той же формой 
:(
    Опции темы
Simpliest
Дата 19.1.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(liliputochka @  19.1.2010,  08:49 Найти цитируемый пост)
submit.x=23&submit.y=14

Ну, кнопку сделали картинкой. Это не должно влиять.

Цитата(liliputochka @  19.1.2010,  08:49 Найти цитируемый пост)
но данных из заполненной мною формы в программе не отобразились. 

Так не бывает. Если конечно там рабочая форма.

При нажатии submit в браузере в Fiddler появляется строка запроса. Если кликнуть по ней, то справа на вкладке Inspectors можно выбрать Raw там все должно быть.
Если этого нет (или при клике по submit не появляется новой строки запроса в Fiddler), то смотрите исходный код страницы с формой. Возможно форма не рабочая (хотя это маловероятно)


--------------------
user posted image
PM   Вверх
liliputochka
Дата 20.1.2010, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 16.3.2006
Где: Волгоград

Репутация: нет
Всего: нет



При нажатии на кнопку submit появляется строка:
#    Result    Protocol    Host    URL    Body    Caching    Content-Type    Process    Comments    Custom    
21    200    HTTP    CONNECT    cwrelectronics.com:443    0            iexplore:5340            

На вкладке Inspectors, в разделе Raw:

CONNECT cwrelectronics.com:443 HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB6.3; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)
Host: cwrelectronics.com:443
Content-Length: 0
Proxy-Connection: Keep-Alive
Pragma: no-cache

The data sent represents an SSLv2-compatible ClientHello handshake. For your convenience, the data is extracted below.

Major Version: 3
Minor Version: 0
Random: 1F E7 0F 2B 36 0E 18 96 FE 63 80 80 00 82 2E 64 
SessionID: empty
Ciphers: 
    [0005] SSL_RSA_WITH_RC4_128_SHA
    [000A] SSL_RSA_WITH_3DES_EDE_SHA
    [0013] SSL_DHE_DSS_WITH_3DES_EDE_SHA
    [0004] SSL_RSA_WITH_RC4_128_MD5
    [10080] SSL2_RC4_128_WITH_MD5
    [700C0] SSL2_DES_192_EDE3_WITH_MD5


Если не трудно, объясните что озночают эти записи. Мне бы хотелось узнать как инициировать нажатие кнопки и проверить корректность данных для аунтификации.
PM MAIL   Вверх
Simpliest
Дата 20.1.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Мммм.
Это точно по тем 3 урл, что в начале топика? Откуда взялся SSL?
Код

Код возврата                                                200 (200 = Ок)    
Протокол                                                    HTTP    
Комманда подключения                                        CONNECT    
Адрес:порт                                                  cwrelectronics.com:443    
Длина запроса                                               0
Собственно процесс который инициировал связь и его PID      iexplore:5340            



Цитата

CONNECT cwrelectronics.com:443 HTTP/1.0

То же что и выше

Цитата

User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB6.3; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)

Из какой программы(как себя программа называет) инициирован запрос.

Цитата

Host: cwrelectronics.com:443

Тоже что и выше
Цитата

Content-Length: 0

Длина тела запроса
Цитата

Proxy-Connection: Keep-Alive

соединение не разрывать
Цитата

Pragma: no-cache

запрос не кешировать

Цитата(liliputochka @  20.1.2010,  08:13 Найти цитируемый пост)
Major Version: 3
Minor Version: 0

Версии

Цитата(liliputochka @  20.1.2010,  08:13 Найти цитируемый пост)
Random: 1F E7 0F 2B 36 0E 18 96 FE 63 80 80 00 82 2E 64 

Понятия не имею
Цитата(liliputochka @  20.1.2010,  08:13 Найти цитируемый пост)
SessionID: empty

Собственно сессия
Цитата(liliputochka @  20.1.2010,  08:13 Найти цитируемый пост)
Ciphers: 
    [0005] SSL_RSA_WITH_RC4_128_SHA
    [000A] SSL_RSA_WITH_3DES_EDE_SHA
    [0013] SSL_DHE_DSS_WITH_3DES_EDE_SHA
    [0004] SSL_RSA_WITH_RC4_128_MD5
    [10080] SSL2_RC4_128_WITH_MD5
    [700C0] SSL2_DES_192_EDE3_WITH_MD5

Поддерживаемые алгоритмы шифрования

Цитата(liliputochka @  20.1.2010,  08:13 Найти цитируемый пост)
 Мне бы хотелось узнать как инициировать нажатие кнопки 

Банально нажать на нее в браузере.

CURL через SSL да с сертификатами работает несколько иначе. Нужно читать мануалы.




--------------------
user posted image
PM   Вверх
liliputochka
Дата 20.1.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 16.3.2006
Где: Волгоград

Репутация: нет
Всего: нет



Благодарю за разъяснения. Они очень информативны.
Цитата(Simpliest @  20.1.2010,  11:30 Найти цитируемый пост)
Банально нажать на нее в браузере.

Дело все в том, что моя задача с помощью curl автоматизировать следующие действия:
1. Зайти на https://cwrelectronics.com/login.php и ввести аккаунт, логин, пароль, нажать кнопку Login*
2. Зайти на http://cwrelectronics.com/b2b/productdownload.php и заполнить поля формы, нажать кнопочку Submit*
3. Получить txt-файл с данными и сохранить этот файл на локальной машине.

*) Обе кнопочки реализованы как картинки.

Сейчас у меня результат следующий:
1. Захожу на страницу авторизации передаю данные, авторизуюсь на сайте, сохраняю кукки
2. Захожу на страницу скачивания товаров (там где форма с данными), заполняю форму данными
После этого данные не передаются на сервер и файл не передается.

Данный результат я получаю крайне редко, хотя в коде ничего не меняю, но я
 то прохожу авторизацию и заполняю поля формы,
 то прохожу авторизацию, но поля формы не заполняются,
 то не прохожу авторизацию
 smile 


Цитата(Simpliest @  20.1.2010,  11:30 Найти цитируемый пост)
CURL через SSL да с сертификатами работает несколько иначе. Нужно читать мануалы.

Код

curl_setopt ( $handle , CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt ( $handle , CURLOPT_SSL_VERIFYHOST, 0 );


Могу вам на email переслать полный текст моего кода, чтобы вы могли посмотреть.
PM MAIL   Вверх
Simpliest
Дата 20.1.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(liliputochka @  20.1.2010,  11:07 Найти цитируемый пост)
2. Захожу на страницу скачивания товаров (там где форма с данными), заполняю форму данными
После этого данные не передаются на сервер и файл не передается

Т.е. даже когда это делается руками, а не скриптом?

Цитата(liliputochka @  20.1.2010,  11:07 Найти цитируемый пост)
Данный результат я получаю крайне редко, хотя в коде ничего не меняю, но я
 то прохожу авторизацию и заполняю поля формы,
 то прохожу авторизацию, но поля формы не заполняются,
 то не прохожу авторизацию

Могу предложить следующее.
Каждый чих записывать в файл.  Т.е. послали запрос - записали его вместе с HTTP заголовками в файл.
Получили ответ - дописали его вместе с HTTP заголовками в файл.

И заставить скрипт выполниться несколько раз. Каждый раз отмечая - получилось или нет.
Таким образом вы получите дамп информации на все свои успешные и неуспешные попытки.

А дальше просто копируем эти дампы в отдельные файлы и сверяем
fc success.txt fail.txt >result.txt
разница будет в result.txt
Собственно ее(разницу) и надо анализировать.

Можно еще сделать все руками и аналогичные дампы взять из Fiddler и сравнить все три между собой.
Если разница будет, например, только во времени отправки, то проблема не на вашей стороне, а на их.

Цитата(liliputochka @  20.1.2010,  11:07 Найти цитируемый пост)
Могу вам на email переслать полный текст моего кода, чтобы вы могли посмотреть.

нет, спасибо не надо. У меня своего хватает smile


--------------------
user posted image
PM   Вверх
liliputochka
Дата 20.1.2010, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 16.3.2006
Где: Волгоград

Репутация: нет
Всего: нет



Цитата(Simpliest @  20.1.2010,  13:36 Найти цитируемый пост)
Т.е. даже когда это делается руками, а не скриптом?

Когда эти операции проделываются руками, все работает. Через скрипт - ни разу.

У меня просьба, может крайне тупая: объясните что такое HTTP заголовки? Я примерно предполагаю, что это адрес страницы и данные которые я передала с этой страницы, но возможно я ошибаюсь или мое представление не полно. 
PM MAIL   Вверх
Simpliest
Дата 20.1.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(liliputochka @  20.1.2010,  13:20 Найти цитируемый пост)
Когда эти операции проделываются руками, все работает. Через скрипт - ни разу.

Тогда надо сделать как я сказал выше - записать в лог работу и скрипта и браузера, а потом сравнивать

Цитата(liliputochka @  20.1.2010,  13:20 Найти цитируемый пост)
объясните что такое HTTP заголовки? 

Вот тут все достаточно подробно рассказано.
http://ru.wikipedia.org/wiki/HTTP
http://ru.wikipedia.org/wiki/HTTP#.D0.97.D....B2.D0.BA.D0.B8



--------------------
user posted image
PM   Вверх
liliputochka
Дата 22.1.2010, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 16.3.2006
Где: Волгоград

Репутация: нет
Всего: нет



Вопрос: когда я прохожу авторизацию у меня идет перенаправление со страницы http://cwrelectronics.com/login.php на страницу http://cwrelectronics.com/b2b/index.php Это может влиять как-то на авторизацию?
 
Еще когда я загружаю страницу авторизации, то заголовок "GET /login.php HTTP/1.1", 
а когда ввожу данные и нажимаю кнопочку submit - заголовок "POST /login.php HTTP/1.1". 
Это происходит, как я думаю, из-за того, что этот файл и обрабатывает введенные данные. Возможно ли что из-за этого я не могу пройти авторизацию? Поясню: с скрипте идет проверка: если(метод == POST) то передать данные в форму. Может в этом дело?

И еще одно: файл http://cwrelectronics.com/b2b/productdownload.php, в котором большая форма передает заголовок "GET /b2b/productdownload.php HTTP/1.1". 
Заполняя эту форму данными и нажимая кнопку submit данные обрабатываются в файле /b2b/handleproductdownload.php с заголовком "POST /b2b/handleproductdownload.php HTTP/1.1". 
И в ответе на данный запрос приходит "Content-Disposition: attachment; filename="productdownload.txt"". Возможно ли сразу передавать данные формы во второй файл и как мне принимать файл, который attachment?


Буду экспериментировать еще, но пока что значительной разницы в заголовках, полученных работой непосредственно с сайтом http://cwrelectronics.com  (прохождением необходимых этапов), и запуском моего скрипта нет. Какие-то идеи есть?
PM MAIL   Вверх
Simpliest
Дата 22.1.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(liliputochka @  22.1.2010,  08:49 Найти цитируемый пост)
Еще когда я загружаю страницу авторизации, то заголовок "GET /login.php HTTP/1.1", 
а когда ввожу данные и нажимаю кнопочку submit - заголовок "POST /login.php HTTP/1.1". 
Это происходит, как я думаю, из-за того, что этот файл и обрабатывает введенные данные.

В первом случае вы запросили страницу формы.
Во втором случае вы отправили данные формы.

Цитата(liliputochka @  22.1.2010,  08:49 Найти цитируемый пост)
Поясню: с скрипте идет проверка: если(метод == POST) то передать данные в форму.

Еще раз. В скрипте может стоять проверка если метод POST то мы "получили" данные формы.

Уясните наконец для себя - никакой формы на сервере нет! Там есть лишь данные запроса - его метод, строка URI и т.д. и скрипт который находится по этому адресу.
Форма и есть только у вас в браузере и все.


Цитата(liliputochka @  22.1.2010,  08:49 Найти цитируемый пост)
Возможно ли сразу передавать данные формы во второй файл

Вопрос абсолютно не понятен. Данные надо передавать туда, где их ждут. В данном случае по строкам "POST чего-то там" в Fiddler вы видите кто должен это обработать. В curl соответственно вы должны туда же и отправлять при помощи метода POST.

Цитата(liliputochka @  22.1.2010,  08:49 Найти цитируемый пост)
как мне принимать файл, который attachment?

http://php.net/curl
http://ua2.php.net/manual/en/function.curl-exec.php - в третьем комментарии есть пример получения файла.

Цитата(liliputochka @  22.1.2010,  08:49 Найти цитируемый пост)
 но пока что значительной разницы в заголовках, полученных работой непосредственно с сайтом http://cwrelectronics.com  (прохождением необходимых этапов), и запуском моего скрипта нет
 Разбираться в той самой "не"значительной разнице которая есть. Потому что проблема именно в ней.



--------------------
user posted image
PM   Вверх
liliputochka
Дата 25.1.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 16.3.2006
Где: Волгоград

Репутация: нет
Всего: нет



Ура! Ура! Ура!
Simpliest вы мне вернули радость жизни! 

Я реализовала в одном скрипте авторизацию, в другом - скачивание файла. Если запускать поочередно 1.php, затем 2.php, то авторизация проходит успешно и файл скачивается! Но я пыталась реализовать последовательный вызов этих файлов в третьем, в виде:
Код

include_once "1.php";
include_once "2.php";

Файл 1.php - с авторизацией - выполняется без ошибок и предупреждений.
Файл 2.php - со скачиванием файла - не выполняется и ошибок не выдает и программа Fiddler2 тоже возвращает код заголовка 200 OK.

Я пыталась соединить код 2-х файлов в один, но результат аналогичен выше указанному. 
Как такое может быть? Ведь если я делаю include, то файл должен подгружаться и выполняться код в файле!
PM MAIL   Вверх
Simpliest
Дата 25.1.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(liliputochka @  25.1.2010,  16:36 Найти цитируемый пост)
Ведь если я делаю include, то файл должен подгружаться и выполняться код в файле! 

Должен. И наверняка выполняется.

Разберите в чем отличие от 
Цитата(liliputochka @  25.1.2010,  16:36 Найти цитируемый пост)
Если запускать поочередно 1.php, затем 2.php, то авторизация проходит успешно и файл скачивается!


Цитата(liliputochka @  25.1.2010,  16:36 Найти цитируемый пост)
Я пыталась соединить код 2-х файлов в один


Я говорил вести логи ответов?
Вот и посмотрите эти логи в 1м и втором случае. 

Скорее всего у вас не передается SID после авторизации. Может кука не запоминается или еще что-то.
А может стоит забытый банальный die() в 1м скрипте и до 2го дело просто не доходит.

Код есть только у вас.
Поэтому http://phpfaq.ru/debug можете делать только вы. Без конкретных сообщений об ошибках никто помочь вам не сможет.





--------------------
user posted image
PM   Вверх
liliputochka
Дата 28.1.2010, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 16.3.2006
Где: Волгоград

Репутация: нет
Всего: нет



Уважаемый Simpliest, вот что я выявила:
скрипт 1.php выполняет все curl_setopt(), вроде выполняет curl_exec(), т.к. создает файл cookiefile.txt и на этом свою работу заканчивает. Раньше он ругался на то, что не находил файл favicon.ico. Но я его скачала. В браузер никакой информации по ошибкам не выводится.
Заголовки ошибки не выдают, наоборот пишут "HTTP/1.1 200 OK".
Последнее что записано в /usr/local/apache/log/error.log:
Цитата

[Thu Jan 28 09:16:51 2010] [warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!
[Thu Jan 28 09:16:52 2010] [notice] Child 4768: Child process is running
[Thu Jan 28 09:16:52 2010] [notice] Child 4768: Acquired the start mutex.
[Thu Jan 28 09:16:52 2010] [notice] Child 4768: Starting 250 worker threads.
[Thu Jan 28 09:16:52 2010] [notice] Child 4768: Listening on port 443.
[Thu Jan 28 09:16:52 2010] [notice] Child 4768: Listening on port 8648.
[Thu Jan 28 09:16:52 2010] [notice] Child 4768: Listening on port 443.
[Thu Jan 28 09:16:52 2010] [notice] Child 4768: Listening on port 80.

Может знаете что можно сделать?
PM MAIL   Вверх
Simpliest
Дата 2.2.2010, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Уф.
Цитата(liliputochka @  28.1.2010,  09:21 Найти цитируемый пост)
вроде выполняет curl_exec(), 

Вроде или таки выполняет?

Если выполняет, то какие результаты ожидаются?
Получены ли они? Что содержиться в файле cookiefile.txt? То что ожидалось?

Цитата(liliputochka @  28.1.2010,  09:21 Найти цитируемый пост)
Последнее что записано в /usr/local/apache/log/error.log:

Это чей лог? Того сайта к которому вы пытаетесь подключиться?
Или ваш? Если ваш - то зачем он?

Логи я рекомендовал вести для своих данных и ответов.
т.е. что-то вида
Код

logtogile('отправляем запрос ', $header , $body);
...
logtofile('запрос прошел успешно');
...
logtofile('получен ответ ', $result);
...

функцию logtofile естественно надо писать самостоятельно.


--------------------
user posted image
PM   Вверх
liliputochka
Дата 21.2.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 16.3.2006
Где: Волгоград

Репутация: нет
Всего: нет



Цитата(Simpliest @  2.2.2010,  21:02 Найти цитируемый пост)
Вроде или таки выполняет?

Вопрос решился таким образом:
Если процесс авторизации на сайте прошел успешно, сайт перенаправляет на другую страницу. В этот момент мой скрипт с curl обрывает работу. 
В следствие чего пришлось разделить работу curl на 2 скрипта, один - проходит авторизацию и 2 - скачивает файл информации. Эти файлы надо запускать последовательно, сначала один потом второй. 
Это положение дел крайне неприятно, но другого решения я не знаю и придумать не могу.

Большое спасибо за помощь Simpliest
PM MAIL   Вверх
Fortop
Дата 21.2.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(liliputochka @  21.2.2010,  11:14 Найти цитируемый пост)
Если процесс авторизации на сайте прошел успешно, сайт перенаправляет на другую страницу. В этот момент мой скрипт с curl обрывает работу

Что значит прерывает? Вы его завершаете? Или он выдает ошибку?

Для перенаправления используйте http://ua.php.net/manual/en/function.curl-setopt.php CURLOPT_FOLLOWLOCATION


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1012 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.