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

Поиск:

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


Бывалый
*


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

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



Народ!!! Помогите пожалуйста!
Заполняю поля формы значениями и посылаю на сервер, в результате должен передаваться файл с данными, но вместо этого как результат запроса мне передается страница с формой, причем не заполненой. Что делать?
Вот исходник:
Код

$URL = "http://cwrelectronics.com/b2b/productdownload.php";
$URL2= "http://cwrelectronics.com/b2b/handleproductdownload.php";
$URL3= "http://cwrelectronics.com/productdownload.txt";
$user = "User";
$pass = "Login";

$handle = curl_init($URL);

$user_pass = $user;
$user_pass .= ":";
$user_pass .= $pass;

$POSTFIELDS = "format=TAB DELIMITED&headerRow=0&categoryNew=ALL&manufacturerNew=ALL&
                invtype=stock&columndata[1]=sku&columndata[2]=mfgn&columndata[3]=upc&
                columndata[4]=qty&columndata[5]=eta&columndata[6]=price&columndata[7]=list&
                columndata[8]=map&columndata[9]=mrp&columndata[10]=st&
                columndata[11]=sdesc&columndata[12]=ti&columndata[13]=fdesc&columndata[14]=catid&
                columndata[15]=cat&columndata[16]=mfg&columndata[17]=wt&columndata[18]=bh&
                columndata[19]=bl&columndata[20]=bw&columndata[21]=acc&columndata[22]=accm&
                columndata[23]=pi&columndata[24]=spec&columndata[25]=wa&columndata[26]=imgpath&
                columndata[27]=haz&columndata[28]=trk&columndata[29]=drp&columndata[30]=re&
                columndata[31]=clo&columndata[32]=sal&columndata[33]=org&columndata[34]=sals&
                columndata[35]=sale&columndata[36]=reb&columndata[37]=rebd&columndata[38]=rebs&
                columndata[39]=rebe&save=1&submit=Search";

$DATA = array('format' => 'TAB DELIMITED', 'headerRow' => '0', 'categoryNew' => 'ALL', 'manufacturerNew' => 'ALL',
                'invtype' => 'stock', 'columndata[1]' => 'sku', 'columndata[2]' => 'mfgn', 'columndata[3]' => 'upc',
                'columndata[4]' => 'qty', 'columndata[5]' => 'eta', 'columndata[6]' => 'price', 'columndata[7]' => 'list',
                'columndata[8]' => 'map', 'columndata[9]' => 'mrp', 'columndata[10]' => 'st',
                'columndata[11]' => 'sdesc', 'columndata[12]' => 'ti', 'columndata[13]' => 'fdesc', 'columndata[14]' => 'catid',
                'columndata[15]' => 'cat', 'columndata[16]' => 'mfg', 'columndata[17]' => 'wt', 'columndata[18]' => 'bh',
                'columndata[19]' => 'bl', 'columndata[20]' => 'bw', 'columndata[21]' => 'acc', 'columndata[22]' => 'accm',
                'columndata[23]' => 'pi', 'columndata[24]' => 'spec', 'columndata[25]' => 'wa', 'columndata[26]' => 'imgpath',
                'columndata[27]' => 'haz', 'columndata[28]' => 'trk', 'columndata[29]' => 'drp', 'columndata[30]' => 're',
                'columndata[31]' => 'clo', 'columndata[32]' => 'sal', 'columndata[33]' => 'org', 'columndata[34]' => 'sals',
                'columndata[35]' => 'sale', 'columndata[36]' => 'reb', 'columndata[37]' => 'rebd', 'columndata[38]' => 'rebs',
                'columndata[39]' => 'rebe', 'save' => '1', 'submit' => 'Search');
                
curl_setopt($handle, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($handle, CURLOPT_URL, $URL); 
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handle, CURLOPT_USERPWD, $user_pass);
curl_setopt($handle, CURLOPT_POST, 1);
curl_setopt($handle, CURLOPT_POSTFIELDS, $DATA);
curl_setopt($handle, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
curl_setopt($handle, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); 

$st = curl_exec($handle);
echo $st;
echo "----------------------------------------------------------------------------------------------------------------------\n";
$dir = "cwrelectronics";
if(!file_exists($dir))
  mkdir($dir, 0777);
$origFileName = $dir."\\prodlist.txt";

$fd = fopen($origFileName, "w"); 
fwrite($fd, $st);
if(fclose($fd)) //    echo "file succesfully download!";

curl_setopt($handle, CURLOPT_URL, $URL2);
curl_setopt($handle, CURLOPT_POST, 0);
curl_setopt($handle, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$statement = curl_exec($handle);
echo $statement;

curl_close($handle);

PM MAIL   Вверх
Simpliest
Дата 14.1.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(liliputochka @  14.1.2010,  11:24 Найти цитируемый пост)
curl_setopt($handle, CURLOPT_POST, 0);

Что это значит?


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


Бывалый
*


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

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



Это я стащила с данного сайта, в частности это: 
Код

curl_setopt($ch, CURLOPT_URL, "http://example.com/personal/login.phtml"); /* Переходим на страницу, 
на которой нужно пройти процедуру авторизации */
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=mylog&psw=mypassword"); /* Внимание! Здесь 
необходимо передать параметры, полученные Вами от сниффера – параметры разделяются 
знаком & */
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://example.com"); /* Теперь заходите на сайт как авторизованный 
пользователь – в данном случае нужно вместо example.com указать URL страницы, на которую может 
попасть только авторизованный пользователь */
curl_setopt($ch, CURLOPT_POST, 0); /* Также необязательное действие, но я указал этот параметр – 
устанавливаю CURLOPT_POST в нуль, ведь теперь мне не нужно передавать данные методом POST */
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); /* Внимание! 
Здесь третий параметр (адрес текстового файла с куками) должен быть точно таким же, как и при 
использовании CURLOPT_COOKIEJAR, иначе процедура авторизации работать не будет, так как 
требуемые серверу Куки не передадутся */

Если вы считаете что данная строка является решающей, то почему когда 
первый раз я выполняю curl_exec() мне возвращается страница с незаполненной формой в то время, когда я передаю ей параметры?

Это сообщение отредактировал(а) liliputochka - 14.1.2010, 20:59
PM MAIL   Вверх
Simpliest
Дата 14.1.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Лично мне некогда разбираться более детально smile

Но форма может возвращаться пустой, например по причине GET запроса вместо POST

У вас там как минимум 2 запроса, и какой из них возвращает пустую форму - вы утаили smile
Разницу видно?
Цитата(liliputochka @  14.1.2010,  19:45 Найти цитируемый пост)
curl_setopt($ch, CURLOPT_POST, 1);

Цитата(liliputochka @  14.1.2010,  11:24 Найти цитируемый пост)
curl_setopt($handle, CURLOPT_POST, 0);



Далее. Насколько я вижу, как минимум на 1й странице надо сначала авторизоваться. И только потом возможно запрашивать данные.
Вы же не авторизовались.



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


Бывалый
*


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

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



Цитата(Simpliest @  14.1.2010,  21:31 Найти цитируемый пост)
Лично мне некогда разбираться более детально smile

Благодарю хотя бы за то, что вы уже сделали!

Цитата(Simpliest @  14.1.2010,  21:31 Найти цитируемый пост)

Но форма может возвращаться пустой, например по причине GET запроса вместо POST

Я проверяла код исходной страницы, там при реализации формы прописан post запрос.

Цитата(Simpliest @  14.1.2010,  21:31 Найти цитируемый пост)
У вас там как минимум 2 запроса, и какой из них возвращает пустую форму - вы утаили smile
Разницу видно?

Разницу то я вижу и прекрасно понимаю смысл. Я закомментировала свой код с 60 по 64 строку (где как раз происходит curl_setopt($handle, CURLOPT_POST, 0); ), результат: возвращается страница в которую я посылаю данные с пустой формой.
Цитата(Simpliest @  14.1.2010,  21:31 Найти цитируемый пост)
Вы же не авторизовались.



Цитата(liliputochka @  14.1.2010,  12:24 Найти цитируемый пост)
curl_setopt($handle, CURLOPT_USERPWD, $user_pass);


PM MAIL   Вверх
Simpliest
Дата 15.1.2010, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(liliputochka @  15.1.2010,  07:06 Найти цитируемый пост)
Цитата(Simpliest @  14.1.2010,  21:31 )
Вы же не авторизовались.

Цитата(liliputochka @  14.1.2010,  12:24 )
curl_setopt($handle, CURLOPT_USERPWD, $user_pass);

Это не совсем то. Там не Basic Auth, а обычная форма авторизации (во всяком случае по первому адресу)

Вам нужно посмотреть на ту форму авторизации и послать на нее параметры таким же способом как  тут
Цитата(liliputochka @  14.1.2010,  19:45 Найти цитируемый пост)
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=mylog&psw=mypassword");

После чего сохранить полученные куки и что там еще будет.
А уж потом посылать свои данные.

P.S. А не проще ли договориться о формате импорта/экспорта с владельцами ресурса?


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


Бывалый
*


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

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



Цитата(Simpliest @  15.1.2010,  09:26 Найти цитируемый пост)
Вам нужно посмотреть на ту форму авторизации и послать на нее параметры таким же способом как  тут

Цитата(liliputochka @  14.1.2010,  19:45 )
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=mylog&psw=mypassword");

Я реализовала по вашему совету: послала в форму аккаунт, логин, пароль; сохранила кукки; зашла на страницу куда должна передавать данные в форму; передаю данные - результат тот же - передается форма с незаполненными полями.

Цитата(Simpliest @  15.1.2010,  09:26 Найти цитируемый пост)
P.S. А не проще ли договориться о формате импорта/экспорта с владельцами ресурса? 

Спасибо за совет!!! Я постараюсь с ними связаться, как вы думаете для реализации этой операции владельцам ресурса много потребуется времени?
PM MAIL   Вверх
liliputochka
Дата 15.1.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я прошу прощения за 
Цитата(liliputochka @  15.1.2010,  10:34 Найти цитируемый пост)
Я реализовала по вашему совету: послала в форму аккаунт, логин, пароль; сохранила кукки; зашла на страницу куда должна передавать данные в форму; передаю данные - результат тот же - передается форма с незаполненными полями.

Появились сдвиги в положительном направлении - передается форма с заполненными полями, только поля: COLUMN 14 , COLUMN 24 , COLUMN 27, COLUMN 28 и COLUMN 29 возвращаются пустыми, хотя в переменной передачи данных значения этих переменных передаю
Код

$POSTFIELDS = "...&columndata[14]=catid&...&columndata[24]=spec&...&
                columndata[27]=haz&columndata[28]=trk&columndata[29]=drp&...";


Может есть какие-нибудь идеи?
Еще один вопрос: как можно сделать так чтобы заполненная форма с данными передавалась на сервер (вроде как я нажала на кнопочку Submit). Я передаю в той же форме значение поля "Submit" = 1, но форма на это не реагирует и данные не обрабатываются.

Это сообщение отредактировал(а) liliputochka - 15.1.2010, 13:16
PM MAIL   Вверх
liliputochka
Дата 15.1.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Извените пожалуйста 
Цитата(liliputochka @  15.1.2010,  11:17 Найти цитируемый пост)
поля: COLUMN 14 , COLUMN 24 , COLUMN 27, COLUMN 28 и COLUMN 29 возвращаются пустыми

это полностью моя вина!!! Недоглядела!
PM MAIL   Вверх
Simpliest
Дата 15.1.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(liliputochka @  15.1.2010,  09:34 Найти цитируемый пост)
Я постараюсь с ними связаться, как вы думаете для реализации этой операции владельцам ресурса много потребуется времени? 

Зависит от многих "но".
В простейшем случае и при не кривых руках это делается за пару-тройку часов.

Если делать полноценный Web-сервис на том же SOAP то день-два может уйти.

Цитата(liliputochka @  15.1.2010,  10:17 Найти цитируемый пост)
Еще один вопрос: как можно сделать так чтобы заполненная форма с данными передавалась на сервер (вроде как я нажала на кнопочку Submit). Я передаю в той же форме значение поля "Submit" = 1, но форма на это не реагирует и данные не обрабатываются.

Вопроса не понял. CURL именно это и реализует.

Может стоит почитать описание как работает HTTP?

Та форма, что показывается в браузере, при отправке превращается в нечто подобное вашей строке 
Цитата(liliputochka @  15.1.2010,  10:17 Найти цитируемый пост)
"...&columndata[14]=catid&...&columndata[24]=spec&...&
                columndata[27]=haz&columndata[28]=trk&columndata[29]=drp&..."

Плюс масса заголовков. И через CURL всеми этими данными и настройками вы и управляете.


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


Бывалый
*


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

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



Цитата(Simpliest @  15.1.2010,  15:41 Найти цитируемый пост)
Вопроса не понял. CURL именно это и реализует.

Сейчас программа реализована так:
1. Захожу на страницу $URL5 = "https://cwrelectronics.com/login.php"; посылаю в форму запросом post логин и пароль, сохраняю кукки в файл
2. Захожу на страницу $URL = "http://cwrelectronics.com/b2b/productdownload.php"; пересылаю в форму данные и в конце в строке данных у меня написано 
Код

"...&3Dsubmit=3DSearch";
(3D - особенность самого сайта)
По идее при нажатии на кнопку отправки данных, данные должны пересылаться в файл 
Код

$URL6 = "http://cwrelectronics.com/b2b/3Dhandleproductdownload.php";
, но когда я пересылаю напрямую в этот файл данные мне приходит ответ что данного файла на сервере не существует. Я пыталась переслать в файл 
Код

$URL2= "http://cwrelectronics.com/b2b/handleproductdownload.php";
 - ответ тот же - нет файла на сервере.
Вопрос в том как сделать так чтобы данные формы передались в нужный файл и обработались на сервере и вернули мне результат.
Сейчас, пересылая 
Код

"...&3Dsubmit=3DSearch";
 событие нажатия кнопки не происходит.
PM MAIL   Вверх
Simpliest
Дата 15.1.2010, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(liliputochka @  15.1.2010,  16:10 Найти цитируемый пост)
 событие нажатия кнопки не происходит. 

Еще раз объясняю.

Никакого события "нажатия кнопки" на сервере нет в помине. По нажатию кнопки БРАУЗЕР отправляет на сервер запрос с данными.
Сервер или получает, или не получает POST запрос с правильными или неправильными данными и выдает ответ.

Установите Fiddler2. Он позволяет смотреть какой запрос куда ушел, с какими заголовками.
Выполните все операции руками. Т.е. зайдите через браузер, авторизуйтесь, введите в форму данные и отправьте.

После чего у вас будут образцы запросов и вы сможете сравнить с теми, что отправляете вы.


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


Бывалый
*


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

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



Большое вам человеческое спасибо за совет!!! Действительно помогло! 

Мне не понятным осталось: почему все заголовки пересылаются, а при авторизации меня на сайте данные формы никак не отображаются? Я перестала проходить авторизацию на сайте, и думаю что это связано с тем что неверно определяю значение на поля submit. Но, как я сказала ранее, названия полей и их значения в программе нет.

Есть идеи?
PM MAIL   Вверх
Simpliest
Дата 18.1.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ничего не понял smile
Какие данные и где должны отобразиться?


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


Бывалый
*


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

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



Я запускаю программу  Fiddler2, захожу на страницу авторизации. Заполняю поля формы и авторизуюсь на сайте. В программе отображается какие запросы куда пошли, какие в сети были дейтсвия, но данных из заполненной мною формы в программе не отобразились. 
Затем я перехожу на страницу, где заполняю поля другой формы и нажимаю кнопку submit. В программе отображается какие поля и их значения были переданы на сервер.

Дело в том, что я перестала проходить авторизацию. Я предполагаю что это связано с кнопкой submit, т.к. во второй форме нажатие кнопки выглядит как: 
Код

...&submit.x=23&submit.y=14

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


 




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


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

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