Boost::asio::read
От: st0nx  
Дата: 25.02.11 08:31
Оценка:
void HttpSendRecv_boost::SendHTTP(char * host,char * ref,char * uAgent)
{
    boost::system::error_code error;
    GET_COOKIE();
    rStr.clear();
    GET_TEXT(host,ref,uAgent);
    boost::asio::write(* socket, request);
    boost::array<char, 124> buf;
    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;

        if(status_code == 200)
        {
    

            while(boost::asio::read(*socket,boost::asio::buffer(buf),boost::asio::transfer_at_least(1), error))
            {
                if(len<124)
                {

                }
                rStr+=buf.data();
                std::cout << buf.data();
            }
        }
};


Доброго времени суток. Вообщем выше описанна функция, отсылает ХТТП запрос ну и получает страницу. Так вот, пробовал получать страницы различных сайтов в итоге программа не доходя до конца страницы(всегда разное кол-во байт считанных от 9000 до 30000) зависала на read(видимо ждала остальные куски). Объясните... может я что не так делаю, что у меня в сокет приходит не вся страница? Ниже код GET запроса:


void HttpSendRecv_boost::GET_TEXT(char * host,char * ref,char * uAgent)
{
std::ostream request_stream(&request);
request_stream << "GET "<< boost::lexical_cast<std::string>(ref) <<" HTTP/1.1\r\n";
request_stream << "Host: "<<boost::lexical_cast<std::string>(host)<<"\r\n";
request_stream << "User-Agent: "<<boost::lexical_cast<std::string>(uAgent)<<"\r\n";
request_stream << "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
request_stream << "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
request_stream << "Accept-Encoding: gzip,deflate\r\n";
request_stream << "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
request_stream << "Keep-Alive: 300\r\n";
request_stream << "Connection: keep-alive\r\n";
int vSize = (int)cookie.size();
if(vSize>0)
{
    request_stream << "Cookie: ";
    for(int i=0;i<vSize;i++)
    {
        request_stream << cookie[i].a <<"="<<cookie[i].b;
    }
}
request_stream <<"\r\n";
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.