|
|
@ -39,15 +39,18 @@ size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
|
|
|
|
return data_size;
|
|
|
|
return data_size;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Input download(const string& address) {
|
|
|
|
Input download(const string& address, bool verbose) { //добавлен параметр 'verbose'
|
|
|
|
stringstream buffer;
|
|
|
|
stringstream buffer;
|
|
|
|
CURL* curl = curl_easy_init();
|
|
|
|
CURL* curl = curl_easy_init();
|
|
|
|
if (curl) {
|
|
|
|
if (curl) {
|
|
|
|
curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
|
|
|
|
curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
|
|
|
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
|
|
|
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
|
|
|
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (verbose){ //добавлено включение подробного вывода, если задан флаг
|
|
|
|
|
|
|
|
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CURLcode res = curl_easy_perform(curl);
|
|
|
|
CURLcode res = curl_easy_perform(curl);
|
|
|
|
if (res != CURLE_OK) {
|
|
|
|
if (res != CURLE_OK) {
|
|
|
|
cerr << "cURL error: " << curl_easy_strerror(res) << endl;
|
|
|
|
cerr << "cURL error: " << curl_easy_strerror(res) << endl;
|
|
|
@ -65,10 +68,35 @@ Input download(const string& address) {
|
|
|
|
|
|
|
|
|
|
|
|
int main(int argc, char* argv[])
|
|
|
|
int main(int argc, char* argv[])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
//добавлена переменная-флаг и URL
|
|
|
|
|
|
|
|
bool verbose = false;
|
|
|
|
|
|
|
|
string url;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//добавлен разбор аргументов
|
|
|
|
|
|
|
|
for(int i=1; i<argc; ++i){
|
|
|
|
|
|
|
|
string arg = argv[i];
|
|
|
|
|
|
|
|
if (arg == "-verbose"){
|
|
|
|
|
|
|
|
verbose =true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (arg[0] == '-'){
|
|
|
|
|
|
|
|
cerr << "Unknow option: " << arg << endl;
|
|
|
|
|
|
|
|
cerr << "Usage: " << argv[0] << "[-verbose] <url>" << endl;
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else{
|
|
|
|
|
|
|
|
url = arg;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Input inn;
|
|
|
|
Input inn;
|
|
|
|
if (argc > 1) {
|
|
|
|
// изменен вызов на verbose download
|
|
|
|
inn = download(argv[1]);
|
|
|
|
//if (argc > 1) {
|
|
|
|
|
|
|
|
// inn = download(argv[1]);
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
if (!url.empty()){
|
|
|
|
|
|
|
|
inn = download(url, verbose);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
inn = input_data(cin, true);
|
|
|
|
inn = input_data(cin, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -78,3 +106,8 @@ int main(int argc, char* argv[])
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Защита вариант 10
|
|
|
|
|
|
|
|
// Добавьте программе опцию -verbose, при указании которой нужно включать отладочный вывод
|
|
|
|
|
|
|
|
// cURL с помощью CURLOPT_VERBOSE. Опция может стоять до или после URL:
|
|
|
|
|
|
|
|
// lab34.exe -verbose http://... или lab04.exe http://... -verbose
|
|
|
|