linux环境下,c语言怎么读取WEB服务器的80端口上页面的内容
已知url ,host, port;
int s, size;
struct sockaddr_in sin;
struct hostent* phe;
char cmd[256];
char msg_hdr[1000];
char* p;
//准备http中GET 方法的请求。
sprintf(cmd,”GET %s\r\nHTTP/1.1\r\nHost:%s”, url, host);
//创建socket
if((s=socket(PF_INET,SOCK_STREAM,0))0)
return -1;
//取得远程主机的IP地址,失败函数返回-1
if((phe = gethostbyname(host)) == NULL)
return -1;
memset(sin,0,sizeof(sin));
memcpy(sin.sin_addr,phe-h_addr,sizeof(struct in_addr));
sin.sin_family=AF_INET;
sin.sin_port=htons(pms-port);
//跟远程机器建立连接,失败函数返回-1
if(connect(s,(struct sockaddr*)sin,sizeof(sin))==-1)
return -1;
//发送GET请求
if(write(s,cmd,strlen(cmd))0)
return 0;
//从链接描述符(连接管道)中读取传送过来的数据
if(read(s, msg_hdr, 300)0)
error;
close(s);
//读到该文件的大小
if((p=strstr(msg_hdr,”Content-Length”))||(p=strstr(msg_hdr,”Content-length:”)))
p+=16;
else
error;
//返回大小
size = atoi(p);
sprintf(cmd,”GET %s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nConnection: close\r\nRange: bytes0-%d\r\n\r\n”, url, host, size);
//创建套接口
if((s=socket(AF_INET,SOCK_STREAM,0))0)
return 0;
//取得远程主机的IP地址,失败返回0
if((phe = gethostbyname(host)) == NULL)
return 0;
memset(sin,0,sizeof(sin));
memcpy(sin.sin_addr,phe-h_addr,sizeof(struct in_addr));
sin.sin_family=AF_INET;
sin.sin_port=htons(port);
//建立连接
if(connect(s,(struct sockaddr*)sin,sizeof(sin))==-1)
return 0;
//发送读取请求
if(write(s,cmd,strlen(cmd))0)
error;
read(s, buf, BUFSIZE)…………..
我写了一个C语言程序,想要他在没有安装C程序的电脑上运行,好像得做一个前台 ,怎么做?求程序高手解决!
C语言程序编译后变成 .exe 才能执行。
你可以在有编译器的计算机上先编译好,然后把 .exe 复制到没有 编译器的电脑上,就可以运行。
前台 — 你是说在桌面上建一个图标,点击运行,当然可以。
关于c语言,怎么写出前台
windows中,其实控制台也属于前台,你是指对话框/窗口界面吧,你可以使用Windows API函数写Windows风格的界面,也可使用封装过的WTL或MFC写
c语言如何在前台打开文件啊?
用system()函数,比如你要打开一个叫a.txt文件,你就直接system(a.txt)
#include stdio.h
#include stdlib.h
void main()
{
system(“a.txt”);
}
怎么通过C语言读取网页里面的数据
简单的请求格式
GET /index.php HTTP/1.0
host:
当我们和服务器连接上之后,发送上面的数据过去,服务器就会返回 index.php 这个页面给我们。
GET 这个 是表示 以什么方式请求,HTTP中还有很多其他的请求方式,常用的就 GET POST (更详细的 可以点开上面 http协议 那个链接)
GET 后面紧跟一个空格 然后 给出,要获取的资源的名称, /index.php 就表示获取网站服务器根目录下 index.php 执行后所产生的内容,我们也可以改成 GET / HTTP/1.0 这就表示获取默认首页的内容 。 GET /1.html HTTP/1.0 就是获取 服务器根目录下 1.html的内容,很容易理解吧。
接下来隔一个空格 跟上 HTTP/1.0 表示 http协议的版本,这个是固定的 。
第二行 host: 用来指定 访问哪个主机。 大家都知道,一个服务器可以放很多个网站,每个网站有不同的域名,所以我们需要用这个host来指定 我们要访问的是哪个网站,这样 才能正确得访问到我们想访问的网站。
第一步,连接服务器。
第二步,按照http协议,发送请求数据,然后就是接受返回的内容。
没错,就这么简单。
在编写程序之前,我们先用一个小工具来模拟一下这个过程,好让我们对http协议了解更深入一些。
telnet工具 如果是 win7下的朋友 猛戳这里–win7开启telnet功能
到此为止,我假设大家电脑上已经开启了 telnet功能,正题开始。
telnet 他是一个基于tcp/ip 协议的程序,为我们用户提供一个 与其他电脑通信的工具,我们可以使用他来和其他电脑进行连接通信。
开始-运行-输入telnet回车, 出现一个黑框如下。
我们这时就可以输入命令,来连接远程主机,比如我们这次是要连接我们自学去论坛 的服务器,
那么我们就输入 open 80 然后回车。
open 是打开的意思 后面跟上 要打开那个主机 然后 后面跟上端口, web服务器默认使用的是80端口,所以 要加上80端口(不加端口 telnet默认是23端口)。
然后会出现下图的情况,这时候 我们就可以输入命令了,输入的命令都将被发送到自学去论坛的服务器上面。大家注意一下 下图红色箭头所指出的部分,那里就是一个输入光标,不用管其他的字。
这就代表 我们已经和远程主机连接上了,就相当于我们上节课中 客户端执行到 connect 函数 之后 就是要调用 send函数发送数据了,在这里 我们只需要按键盘输入到黑色窗口中 就会发送到服务端。
我们依次输入以下内容,(注意,不能按退格,输入错误了,就重新打开telnet,重新操作。)
怎么用C语言编写一个程序,登陆网站然后请求页面
#include stdio.h
#include string.h
#include stdlib.h
#include time.h
/*随机码产生函数*/
void RandomCode (char Rcode[])
{
int i;
srand ((unsigned int)time(NULL));
for (i = 0; i 3; ++i)
Rcode[i] = rand()%10 + ‘0’;
Rcode[i] = ‘\0’;
}
/*登陆函数,判断信息是否匹配,若匹配返回1,否则返回0*/
int LandedApp (char *password[], char Rcode[])
{
char name[10] = {0};
char pword[10] = {0};
char rcode[4] = {0};
printf (“用户名 : “);
gets (name);
printf (“密码 : “);
gets (pword);
printf (“随机码 : “);
gets (rcode);
if (strcmp (name, password[0]) != 0 || strcmp (pword, password[1]) != 0 || strcmp (rcode, Rcode) != 0)
return 0;
else
return 1;
}
int main ()
{
char * password[2] = {“admin”, “admin123”}; //用户名和密码
char rc[4] = {0}; //随机码
int count = 3; //可输入次数
puts (“请输入用户名,密码和随机码:”);
while (count)
{
RandomCode (rc);
printf (“随机码 : %s\n”, rc);
if (LandedApp(password, rc) != 0)
break;
–count;
if (count != 0)
puts (“错误的用户名或密码或随机码,请重新输入: “);
}
if (count != 0)
puts (“\n成功登陆!”);
else
puts (“\n登录失败 !”);
return 0;
}