我尝试将stream.rdbuf()写入文件,但它似乎不起作用,只是一个空白文件,我不知道该怎么做。
#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp>
#include <conio.h>
#include <stdio.h>
#include <fstream>
char buffer [9999999];
int main()
{
boost::asio::ip::tcp::iostream stream;
stream.expires_from_now(boost::posix_time::seconds(60));
stream.connect("www.mail.ru","http");
stream << "GET / HTTP/1.1\r\n";
stream << "Host mail.ru\r\n";
stream << "User-Agent Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11\r\n";
stream << "Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" ;
stream << "Accept-Encoding gzip,deflate,sdch\r\n";
stream << "Accept-Language en-US,en;q=0.8\r\n";
stream <<"Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n";
stream << "Cookie \r\n\r\n";
stream.flush();
using namespace std ;
cout << stream.rdbuf();
ofstream f("output.txt" /*| ios::bin*/);
f << stream.rdbuf();
f.close();
system("pause");
return 0 ;
}
答案 0 :(得分:1)
您正在调用stream.rdbuf()
两次:一次是标准输出cout
,然后是文件。
从您的解释中不清楚您是否在屏幕上看到任何结果(当您写到cout
时)。
1)如果是,则需要将其写入文件:当您再次读取流时,它已用尽且不包含任何内容。
只需删除
即可cout << stream.rdbuf();
线。
如果您还需要在屏幕上查看结果,请先在std::stringstream
中捕获结果,然后将其内容输出到屏幕和文件(使用seekp
{ {1}}在第一次提取后重置它
2)如果您在屏幕上看不到结果,则很可能在连接服务时遇到问题