У одного из пользователей моей программы на 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();
Повторюсь, такая проблема лишь у одного из пользователей, так что в целом код рабочий. В чем проблема и как ее можно выявить?