Как скачать базу данных IP2Location с помощью curl
Я пытаюсь загрузить базу данных из IP2Location, используя предоставленную ими команду curl. Я зарегистрирован, значит у меня есть действующий токен. Они дают команду
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-адрес в браузере. Кто-нибудь может указать на мою ошибку?
3 ответа
Решение
Пожалуйста, попробуйте следующее. Обратите внимание, что вы будете загружать zip-файл, содержащий bin-файл.
<?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;
}
#!/bin/bash
fileUrl="https://www.ip2location.com/download?token=XXXXXXXXXX&file=DB1LITECVS"
saveTo="db_download.zip"
curl -o "$saveTo" -k "$fileUrl"
statusCode=$(curl -s -w "%{http_code}" -o /dev/null "$fileUrl")
if [ "$statusCode" == "200" ]; then
echo "Downloaded!"
else
echo "Status Code: $statusCode"
fi
Добавьте curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); и это работает, спасибо