如何实现HTTP请求?

jone7319 2016-02-13 10:44:17
新年好!
很久不写代码了,最近 我想写一段代码获取网络时间,初步方案是从http://www.beijing-time.org/time15.asp这个页面返回时间。抓包看了一下,包的内容如下:
GET /time15.asp HTTP/1.1
Host: www.beijing-time.org
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: AJSTAT_ok_times=4; ASPSESSIONIDQQACDBBT=KBPLFKEDFJJFDGNEJDIJNEEG

以前写了一个类要以实现http POST 和GET,测试一下竟然用不了!用CppWebBrowser可以实现,但不是我想要的。能不能用SOCKet来实现。测试以下代码也不能正确返回。
TClientSocket *sckt=new TClientSocket(this);
sckt->ClientType=ctBlocking;
sckt->Address="120.25.212.59";
sckt->Port=StrToInt("80");
sckt->Open();
bool test_flag=sckt->Active;
sckt->Socket->SendText("GET /time15.asp HTTP/1.0");
AnsiString info=sckt->Socket->ReceiveText();
ShowMessage(info);
请各位大侠给一个能正确返回时间的好方案!谢了!
...全文
315 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcchm 2016-03-03
  • 打赏
  • 举报
回复
除了vcl,还可以用libcurl:https://curl.haxx.se/
jone7319 2016-02-23
  • 打赏
  • 举报
回复
修改后可以取时间了!谢谢!

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringStream *stream= new TStringStream(NULL);
    TIdHTTP *http=new TIdHTTP(NULL);
    http->Get("http://www.beijing-time.org/time15.asp", stream);
    String dtstr=stream->DataString,dt0,dt;
    int p1,p2;
    p1=dtstr.Pos(";");
    dtstr=dtstr.SubString(p1+1,200);
    for(int i=0;i<7;i++)
      {
        p1=dtstr.Pos("=");
        p2=dtstr.Pos(";");
        dt0=dtstr.SubString(p1+1,p2-p1-1);
        dtstr=dtstr.SubString(p2+1,200);
        if(i!=3)
           dt+=dt0;
        if(i<2)
            dt=dt+"-";
        if(i==2)
           dt+=" ";
        if(i>3 && i<6)
          dt+=":";
       }
    TDateTime datetime=StrToDateTime(dt);
    ShowMessage(datetime);
    delete stream,http;
}
jone7319 2016-02-23
  • 打赏
  • 举报
回复
引用 4 楼 ksrsoft 的回复:
void __fastcall TForm6::Button1Click(TObject *Sender)
{
	TStringStream *stream;
	stream = new TStringStream();
	this->IdHTTP1->Get("http://www.beijing-time.org/time15.asp", stream);

	this->Caption = stream->Size;
	Memo1->Text = stream->DataString;
	delete stream;
}
不知你测试过代码没有,我用的BCB6报错 stream = new TStringStream();
缘中人 2016-02-14
  • 打赏
  • 举报
回复
void __fastcall TForm6::Button1Click(TObject *Sender)
{
	TStringStream *stream;
	stream = new TStringStream();
	this->IdHTTP1->Get("http://www.beijing-time.org/time15.asp", stream);

	this->Caption = stream->Size;
	Memo1->Text = stream->DataString;
	delete stream;
}
jone7319 2016-02-14
  • 打赏
  • 举报
回复
引用 2 楼 ksrsoft 的回复:
不用CppWebBrowser,可以用idhttp
Idhttp之前也试过,会出现错误
jone7319 2016-02-13
  • 打赏
  • 举报
回复
TClientSocket *sckt=new TClientSocket(this); sckt->ClientType=ctBlocking; sckt->Address="120.25.212.59"; sckt->Port=StrToInt("80"); sckt->Open(); bool test_flag=sckt->Active; sckt->Socket->SendText("GET /time15.asp HTTP/1.1\r\n"); //改这里为sckt->Socket->SendText("GET /time15.asp \r\n"); 或sckt->Socket->SendText("GET /time15.asp");均无返回 AnsiString info=sckt->Socket->ReceiveText(); ShowMessage(info);
缘中人 2016-02-13
  • 打赏
  • 举报
回复
不用CppWebBrowser,可以用idhttp

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧