2017-01-04 5 views
2

Я выяснил, как использовать функции curl php для автоматического входа в 2 разных радиостанции, но у меня проблемы с маршрутизаторами netgear.

Проблема заключается в том, что его экран входа в систему состоит из всплывающего окна, в которое вы вводите пользователя/пароль, и я не могу понять, как обрабатывать его с помощью функций curl php.
Я попытался добавить
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
как предложено в ответ на this question post, , но он просто вернул «неверный логин» экран (раньше, было бы просто повесить на данный момент, так что я предполагаю, что это улучшение).Использование функций php curl для обработки всплывающего окна входа (маршрутизатор netgear)

Я также попытался добавить как
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
и
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
перед ним и поворачивая CURLOPT_FOLLOWLOCATION и выключаться, но тот же результат.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $LoginPage);//IP Address followed by :8080 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_USERPWD, $Username . ":" . $Password); 
$data = curl_exec($ch); 

Update (2018/2/5):
Следующая дал мне часть страницы настроек маршрутизатора! Я, вероятно, придется возиться с HTML/JavaScript, чтобы получить остальное ...

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);//10 seconds 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);//kept trying options till it worked 
    curl_setopt($ch, CURLOPT_USERPWD, "$Username:$Password");   
    $result = curl_exec($ch);   
    //$resultStatus = curl_getinfo($ch); 
    //print 'ResultStatus:'.print_r($resultStatus) . "<br>"; 
    curl_close($ch); 
    echo($result); 
+0

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

+0

Возможный дубликат [Как сделать запрос с использованием базовой проверки подлинности HTTP с помощью PHP curl?] (Http://stackoverflow.com/questions/2140419/how-do-i-make-a-request-using-http-basic -authentication-with-php-curl) –

+0

Интересно, если [предложение Бармара] (https://stackoverflow.com/questions/48548667/php-script-to-automatically-log-into-browsers-native-login-prompt# comment84093757_48548667) использования формата 'username: password' в URL (т. е.' https: // имя пользователя: пароль @ www.routerlogin.net') будет работать ... –

ответ

1

заимствование из this answer, заголовок должен быть установлен. Вместо того, чтобы:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_USERPWD, $Username . ":" . $Password); 

использовать эти опции:

$headers = array(
    'Content-Type:application/json', 
    'Authorization: Basic '. base64_encode("$Username:$Password") 
); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

И этот вариант может также должны быть установлены:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
+0

Когда я попытался заменить эти параметры, он вернул ошибку «404» но только когда я попытался напечатать или var_dump вывод curl_exec. –

+0

Хмм .. если вы получаете информацию об curl (например, вызывая ['curl_getinfo ($ ch)'] (http://php.net/manual/en/function.curl-getinfo.php)) после вызова ' curl_exec ($ ch) ', соответствует ли 'url' результирующего массива указанному вами URL? –

+0

обновление: фиксированный код, теперь возвращает «false» –

1

Наконец получил его! Последнее, что мне было нужно, было curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY), что мне пришлось попробовать, попробовав настройки по одному (см. Полный ответ в редакции вопроса). Спасибо за все полезные предложения.

 Смежные вопросы

  • Нет связанных вопросов^_^