cURL+https+multipart/form-data

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
teandr
Сообщения: 2
Зарегистрирован: 13 янв 2010, 09:23

Доброго времени суток!!!

Требуется авторизоваться на сайте с помощью cURL .

Форма запроса:

[html]<form id="index" action="https://www.needlive.com/studiologin/index.php" method="post" enctype="multipart/form-data">
<input type="hidden" id="client_datetime" name="client_datetime" value="" />
<input type="text" name="PerformerID" id="PerformerID" maxlength="50" value="" />
<input type="password" name="PPassword" id="PPassword" maxlength="50" value="" />
<input type="submit" id="mlogin" name="mlogin" value="Login" />
<input type="text" name="StudioID" id="StudioID" maxlength="50" value="" />
<input type="password" name="SPassword" id="SPassword" maxlength="50" value="" />
<input type="submit" id="slogin" name="slogin" value="Login" />
</form>[/html]

Содержание запроса:

Content-Type=multipart/form-data; boundary=---------------------------41184676334

POSTDATA =-----------------------------114782935826962
Content-Disposition: form-data; name="client_datetime"

Wed Jan 13 2010 04:49:35 GMT+0000
-----------------------------114782935826962
Content-Disposition: form-data; name="PerformerID"

login
-----------------------------114782935826962
Content-Disposition: form-data; name="PPassword"

password
-----------------------------114782935826962
Content-Disposition: form-data; name="mlogin"

Login
-----------------------------114782935826962
Content-Disposition: form-data; name="StudioID"


-----------------------------114782935826962
Content-Disposition: form-data; name="SPassword"


-----------------------------114782935826962--

Пишу такой код:

[php]<?php
$date=date("D M d Y H:i:s \G\M\TO");
$postdata=array(
'client_datetime'=>'.$date.',
'PerformerID'=>'login',
'PPassword'=>'password',
'mlogin'=>'Login',
'StudioID'=>'',
'SPassword'=>''
);
// вход в систему
// имя хоста, куда будем заходить
$hostname = 'www.mysite.com';

// инициализация cURL
$ch = curl_init('https://'.$hostname.'/studiologin/index.php');
// получать заголовки
curl_setopt ($ch, CURLOPT_HEADER, 1);
// если ведется проверка HTTP User-agent, то передаем один из возможных

допустимых вариантов:
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT

5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');
// елси проверятся откуда пришел пользователь, то указываем допустимый

заголовок HTTP Referer:
curl_setopt ($ch, CURLOPT_REFERER,

'https://'.$hostname.'/studiologin/index.php');
// использовать метод POST
curl_setopt ($ch, CURLOPT_POST, 1);
// сохранять информацию Cookie в файл, чтобы потом можно было ее использовать
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'C:\AppServ\www\cookie.txt');
curl_setopt($ch,CURLOPT_COOKIEFILE,'C:\AppServ\www\cookie.txt');
// передаем поля формы
curl_setopt ($ch, CURLOPT_POSTFIELDS,$postdata);
// возвращать результат работы
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// не проверять SSL сертификат
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
// не проверять Host SSL сертификата
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
// это необходимо, чтобы cURL не высылал заголовок на ожидание
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Expect:'));
// выполнить запрос
curl_exec ($ch);
// получить результат работы
$result = curl_multi_getcontent ($ch);
// вывести результат
echo $result;
// закрыть сессию работы с cURL
curl_close ($ch);
?>[/php]

Выдает это:

HTTP/1.1 302 Found Server: nginx/0.7.64 Date: Wed, 13 Jan 2010 05:15:25 GMT Content-Type: text/html Connection: keep-alive X-Powered-By: PHP/5.1.6 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: member_skin=skin2; expires=Fri, 12-Feb-2010 05:15:25 GMT; path=/; domain=.needlive.com location: /performerarea/ Content-Length: 0

Что я делаю неправильно? Подскажите пожалуйста!
teandr
Сообщения: 2
Зарегистрирован: 13 янв 2010, 09:23

Вопрос закрыт!

Решается добавлением строки:

curl_setopt ($ch, CURLOPT_HEADER, 1);

Всем спасибо!
Ответить