Почему может не работать загрузка файлов с помощью C++? У одного из пользователей моей программы на C++ не работает загрузка файлов через HTTP. В браузере и в (ping «host») все в порядке, но программа не получает никакого ответа от сервера.
Я попробовал URLDownloadToFile и она возвращает -2146699211. В OnProgress status_code имеет значения 1 и 2 и дальше не идёт.std::string url = "http://r-rp.ru/projects/crmp/info.xml";
DeleteUrlCacheEntryA(url.c_str());
URLDownloadToFileA(NULL, url.c_str(), "info.xml", 0, NULL);
Я также пытался использовать Boost.Asio, но после долгой загрузки он не возвращал никакого ответа вообще.ip::tcp::resolver resolver(service);
ip::tcp::resolver::query query("r-rp.ru", "http");
ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
ip::tcp::resolver::iterator end;
ip::tcp::socket socket(service);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
socket.close();
socket.connect(*endpoint_iterator++, error);
}
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "GET " << /projects/crmp/info.xml << " HTTP/1.0\r\n";
request_stream << "Host: " << r-rp.ru << "\r\n";
request_stream << "Accept: */*\r\n";
request_stream <> http_version;
unsigned int status_code;
response_stream >> status_code;
std::string status_message;
std::getline(response_stream, status_message);
boost::asio::read_until(socket, response, "\r\n\r\n");
std::string header;
while (std::getline(response_stream, header) && header != "\r") {}
std::ofstream outFile("info.xml", std::ofstream::out | std::ofstream::binary);
if (response.size() > 0)
{
outFile << &response;
}
while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
{
outFile <

21 Авг 2019 в 06:44
262 +1
0
Ответы
1

Существует несколько причин, по которым загрузка файлов с помощью C++ может не работать у одного из пользователей:

Проблемы с доступом к сети: у пользователя могут быть ограничения на доступ к определенным URL-адресам или портам. Проверьте, что пользователь имеет доступ к указанному URL и порту.

Проблемы с брандмауэром: брандмауэр на компьютере пользователя может блокировать доступ к определенным URL-адресам или портам. Убедитесь, что программа имеет соответствующие права доступа в брандмауэре.

Проблемы с HTTPS: если URL начинается с "https://" вместо "http://", то ваш код не может обрабатывать SSL-защищенные соединения. В этом случае, вам нужно использовать другие библиотеки, способные работать с SSL, такие как OpenSSL.

Проблемы с DNS: возможно, у пользователя есть проблемы с разрешением DNS. Убедитесь, что DNS-запросы правильно разрешаются для указанного URL-адреса.

Проблемы с временами ожидания: возможно, сервер долго отвечает на запросы, и ваше приложение не ждет достаточно долго. Убедитесь, что вы установили адекватные временные ожидания для запросов.

Для выявления проблемы рекомендуется добавить логирование в вашем коде, чтобы увидеть, на каком этапе инициируется проблема. Также можно попросить пользователя выполнить отладку программы на своем компьютере и предоставить вам результаты, чтобы вы могли проанализировать проблему детальнее.

20 Апр 2024 в 13:13
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир