如何使用 curl 下载 IP2Location 数据库

Posted

技术标签:

【中文标题】如何使用 curl 下载 IP2Location 数据库【英文标题】:How to download IP2Location database with curl 【发布时间】:2020-10-14 19:04:54 【问题描述】:

我正在尝试使用他们提供的 curl 命令从 IP2Location 下载数据库。我已注册,所以我有一个有效的令牌。他们给出的命令是

    curl -o LOCAL_FILE_NAME "https://www.ip2location.com/download?token=DOWNLOAD_TOKEN&file=DATABASE_CODE"

这是我正在使用的代码,除了我的令牌:

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL, "https://www.ip2location.com/download?token=mytoken&file=DB1LITEBIN");

    $dbfile = curl_exec($curl);

    if (curl_errno($curl)) 
     echo 'err '.curl_errno($curl);
                      

    curl_close($curl);

    $file = 'db_download.bin';  
    $mode = 'w';

     if (($fp = fopen($file , $mode)))     
       $fout = fwrite($fp, $dbfile);
       fclose($fp);  
      

脚本运行没有错误,但下载的文件只是他们网站的未找到页面。如果我在浏览器中使用 url,我会找不到相同的页面。有人可以指出我的错误吗?

【问题讨论】:

【参考方案1】:

请尝试以下操作。请注意,您将下载一个包含 bin 文件的 zip 文件。

<?php

//The resource that we want to download.
$fileUrl = 'https://www.ip2location.com/download?token=XXXXXXXXXX&file=DB1LITEBIN';

//The path & filename to save to.
$saveTo = 'db_download.zip';

//Open file handler.
$fp = fopen($saveTo, 'w+');

//If $fp is FALSE, something went wrong.
if($fp === false)
    throw new Exception('Could not open: ' . $saveTo);


//Create a cURL handle.
$ch = curl_init($fileUrl);

//Pass our file handle to cURL.
curl_setopt($ch, CURLOPT_FILE, $fp);

//Timeout if the file doesn't download after 20 seconds.
curl_setopt($ch, CURLOPT_TIMEOUT, 20);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

//Execute the request.
curl_exec($ch);

//If there was an error, throw an Exception
if(curl_errno($ch))
    throw new Exception(curl_error($ch));


//Get the HTTP status code.
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

//Close the cURL handler.
curl_close($ch);

//Close the file handler.
fclose($fp);

if($statusCode == 200)
    echo 'Downloaded!';
 else
    echo "Status Code: " . $statusCode;

【讨论】:

以上是关于如何使用 curl 下载 IP2Location 数据库的主要内容,如果未能解决你的问题,请参考以下文章

IP2Location 记录到 Pandas DataFrame

ip2location 仅用于查找特定位置的 IP 地址

如何使用 cURL 从 GitHub 下载 tarball?

PHP + PDF,如何使用 curl 保存下载的 PDF?

PHP + PDF,如何使用curl保存下载的PDF?

Windows下如何使用curl命令?