2013-02-18 2 views
0

Я пытаюсь войти на внешнюю веб-страницу, используя php-скрипт с cURL. Я новичок в cURL, поэтому чувствую, что мне не хватает кусочков. Я нашел несколько примеров и изменил их, чтобы разрешить доступ к страницам https. В конечном счете, моя цель - войти в систему на странице и загрузить CSV, указав указанную ссылку после входа в систему. До сих пор у меня есть скрипт, который проверяет вход на страницу; сценарий показан ниже:PHP cURL перенаправляет на localhost

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://www.websiteurl.com/login'); 
curl_setopt($ch, CURLOPT_POSTFIELDS,'Email='.urlencode($login_email).'&Password='.urlencode($login_pass).'&submit=1'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"); 
curl_setopt($ch, CURLOPT_REFERER, "https://www.websiteurl.com/login"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
$output = curl_exec($ch); 

У меня есть несколько вопросов. Во-первых, есть ли причина, по которой это не перенаправляет самостоятельно? Единственный способ для меня, чтобы просмотреть содержимое страницы является

echo $output 

даже если CURLOPT_RETURNTRANSFER и CURLOPT_FOLLOWLOCATION оба устанавливаются в True.

Во-вторых, URL-адрес страницы остается на «localhost/folderName/test.php», а не на фактический веб-сайт. Может ли кто-нибудь объяснить, почему это происходит? Поскольку сценарий фактически не перенаправляется на зарегистрированную веб-страницу, я не могу сделать ничего, что мне нужно сделать.

Имеет ли моя проблема куки? Мой файл cookie.txt находится в той же папке, что и мой .php-скрипт. (Я использую wampServer btw). Должен ли он находиться в другом месте?

Как только я смогу исправить эти две проблемы, кажется, что все, что мне нужно сделать, это перенаправить на ссылку, которая начнет процесс загрузки файла CSV.

Спасибо за любую помощь, высоко ценим!

ответ

2

Ответ часть вашего вопроса:

http://php.net/manual/en/function.curl-setopt.php От:

CURLOPT_RETURNTRANSFER TRUE, чтобы вернуть передачи в виде строки значения возврата curl_exec() вместо вывода его непосредственно.

Иными словами - выполнение именно того, что вы описали. Он возвращает ответ на строку, и вы видите echo, чтобы увидеть его. В соответствии с поручением ...

----- EDIT -----

Что касается второй части вашего вопроса - когда я изменяю последние три строки сценария для

$output = curl_exec($ch); 
header('Location:'.$website); 
echo $output; 

адрес страницы в отображенных изменений в $website - в моем случае это переменная я использую, чтобы сохранить мой эквивалент вашей «https://www.websiteurl.com/login»

Я не уверен, что это то, что вы хотели сделать, потому что я не уверен, что понимаю, что ваши следующие шаги. Если вы перенаправляетесь на сайт входа, не будет ли новый адрес частью возвращаемого заголовка? И вам не нужно будет извлекать этот адрес для выполнения следующего запроса (wget или что-то еще), чтобы загрузить файл, который вы хотели получить?

Для этого вам необходимо установить CURLOPT_HEADER в TRUE,

Вы можете получить URL, где кончался от

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 

(см cURL , get redirect url to a variable).

Та же ссылка также имеет полезный скрипт для полного анализа информации заголовка (возвращаемый при CURLOPT_HEADER==true Это в ответ: Nico limpica

Итог:.. CURL получает информацию, что ваш браузер получил бы, если вам указал на конкретный сайт, это не значит, что ваш браузер ведет себя так, как будто вы указали его на этот сайт ...

+0

Отлично, спасибо! Я только что вернулся к документации, и вы ответили на эту часть, прежде чем я получил чтобы изменить мой пост! – Chimi

+0

Привет, я прочитал, что вы опубликовали, и когда я перенаправляюсь на сайт (где он должен идти после входа в систему), он отправляет меня на страницу входа в систему, если я не вошел в систему. Таким образом, похоже, что существует разрыв между выводимым мной результатом, что делает его похожим на то, что я вошел в систему и фактически заходил на сайт. Чтобы уточнить, что я хочу сделать, так это иметь возможность входа на сайт и затем автоматически загружать определенный файл (путем перехода к ссылке на этом веб-сайте в качестве зарегистрированного пользователя). – Chimi

+0

Теперь я понимаю ваш комментарий о файлах cookie ... Вы пытались увидеть, какие файлы cookie создаются при входе в систему вручную? Вы видите то же самое после вашего запроса на завивание? – Floris