Модераторы: 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   Вверх
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   Вверх
liliputochka
Дата 25.2.2010, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Fortop спасибо вам большое!  smile  Как же вы мне помогли!
PM MAIL   Вверх
Fortop
Дата 25.2.2010, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Карл Маркс и Фридрих Энгельс - это не муж и жена, а 4ре разных человека.


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


 




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


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

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