Автоматизировать загрузку MaxMind и загрузку БД

Я пытаюсь использовать PHP CURL для входа в учетную запись MaxMind и загрузки определенного файла, я даже не могу заставить работать часть входа в систему, следующее возвращает «false»:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.maxmind.com/en/account');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

var_dump($result);

1

Решение

Гораздо проще автоматизировать загрузку файла: https://www.maxmind.com/en/download_files и скопируйте URL ссылки для нужного вам формата базы данных. Если вы хотите всегда загружать самую последнюю базу данных, удалите параметр даты из URL. Если вы используете wget или curl из сценария оболочки, обязательно укажите URL в кавычках.

Если вы загружаете форматы dat или mmdb, есть также программа для автоматического обновления, http://dev.maxmind.com/geoip/geoipupdate/

1

Другие решения

В соответствии с вашим утверждением выше, я добавлю свой комментарий в перефразированном формате с некоторым дополнительным кодом — однако кажется, что вы уже нашли решение и уже приняли ответ, но не обращайте внимания.

Обычно запрос скручивания к конечной точке SSL требует настройки большего количества параметров, особенно во многих случаях использование действительного cacert.pem файл и явные опции для проверки хоста SSL. Метод аутентификации, выбранный в исходном коде, больше подходит для входа в ограниченную область, защищенную .htaccess файл, а не стандартная веб-форма входа в систему, где поля, используемые в запросе на публикацию, должны следовать именам, указанным в элементах формы. Как правило, при попытке эмулировать веб-логин я скопирую соответствующую форму, а затем найду все input элементы и использовать их в данных POST, которые я предоставляю в запрос curl.

/* A simple curl function */
function mmcurl( $url=NULL, $data=array(), $options=NULL ){

/* Download cacert.pem and change path here to suit */
$cacert='c:/wwwroot/cacert.pem';
$cookiejar=tempnam( sys_get_temp_dir(), '_cookiejar_' );$curl=curl_init();

if( parse_url( $url,PHP_URL_SCHEME )=='https' ){
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $curl, CURLOPT_CAINFO, realpath( $cacert ) );
}

curl_setopt( $curl, CURLOPT_URL,trim( $url ) );
curl_setopt( $curl, CURLOPT_AUTOREFERER, TRUE );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, TRUE );
curl_setopt( $curl, CURLOPT_FRESH_CONNECT, TRUE );
curl_setopt( $curl, CURLOPT_HEADER, FALSE );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt( $curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0' );
curl_setopt( $curl, CURLOPT_ENCODING, '' );

if( $options->cookie ){
curl_setopt( $curl, CURLOPT_COOKIEFILE, $cookiejar );
curl_setopt( $curl, CURLOPT_COOKIEJAR, $cookiejar );
curl_setopt( $curl, CURLOPT_COOKIE, $cookiejar );
}
if( $options->post ){
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, http_build_query( $data ) );
}

$res=(object)array(
'response'  =>  curl_exec( $curl ),
'info'      =>  curl_getinfo( $curl ),
'errors'    =>  curl_error( $curl ),
'cookie'    =>  $cookiejar
);
curl_close( $curl );
return $res;
}/* configure and call the function - used the suggestion from @Thomas for the endpoint url  */
$url='https://www.maxmind.com/en/download_files';
$data=array(
'login'         =>  $username,  /* where $username & $password are YOUR variables */
'password'      =>  $password,
'pkit_login'    =>  1,
'pkit_done'     =>  '/en/download_files',
'Login'         =>  'Login'
);
$options=(object)array(
'post'  =>true,
'cookie'=>true
);

$res=mmcurl( $url, $data, $options );

pre($res->info);

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

0

По вопросам рекламы [email protected]