自动化MaxMind登录和DB下载



我试图使用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);

自动下载文件的一种更简单的方法是转到https://www.maxmind.com/en/download_files并复制所需数据库格式的链接URL。如果希望始终下载最新的数据库,请从URL中删除date参数。如果你在shell脚本中使用using wget或curl,请务必将URL放在引号内。

如果您正在下载数据或mmdb格式,也有一个程序来处理自动更新,http://dev.maxmind.com/geoip/geoipupdate/

根据你上面的陈述,我将用一些额外的代码以重新散列的格式添加我的评论-然而,似乎你已经找到了解决方案并接受了答案,但没关系。

通常,对SSL端点的curl请求需要配置更多选项,特别是在许多情况下使用有效的cacert.pem文件和用于验证SSL主机的显式选项。原始代码中选择的验证方法更适合登录到受.htaccess文件保护的受限区域,而不是标准的基于web的登录表单,其中post请求中使用的字段应遵循表单元素中给定的名称。一般来说,当尝试模拟web登录时,我会复制有问题的表单,然后找到所有input元素,并在我提供给curl请求的POST数据中使用它们。

/* 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错误,这似乎是正确的错误的用户名和密码。

相关内容

  • 没有找到相关文章

最新更新