Почему может не работать загрузка файлов с помощью 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 << "Connection: close\r\n\r\n";

boost::asio::write(socket, request);
boost::asio::streambuf response;
boost::asio::read_until(socket, response, "\r\n");

std::istream response_stream(&response);
std::string http_version;
response_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 << &response;
}
outFile.close();


Повторюсь, такая проблема лишь у одного из пользователей, так что в целом код рабочий. В чем проблема и как ее можно выявить?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 2
BojackHorseman
@BojackHorseman
...в творческом отпуске...
прокси?

UrlDownloadToFile will use a proxy server to access the Internet if such a proxy has been configured in Microsoft Internet Explorer's settings.

фаервол?
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Попробуйте использовать https://github.com/Microsoft/cpprestsdk
должно корректно обрабатывать системные настройки всяких proxy/pac/wpad
по крайней мере на windows
+ годное api
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы