⑴ 怎么通过C语言读取网页里面的数据
简单的请求格式
GET /index.php HTTP/1.0
host:www.zixue7.com
当我们和服务器连接上之后,发送上面的数据过去,服务器就会返回 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:www.zixue7.com 用来指定 访问哪个主机。 大家都知道,一个服务器可以放很多个网站,每个网站有不同的域名,所以我们需要用这个host来指定 我们要访问的是哪个网站,这样 才能正确得访问到我们想访问的网站。
第一步,连接服务器。
第二步,按照http协议,发送请求数据,然后就是接受返回的内容。
没错,就这么简单。
在编写程序之前,我们先用一个小工具来模拟一下这个过程,好让我们对http协议了解更深入一些。
telnet工具 如果是 win7下的朋友 猛戳这里-->win7开启telnet功能
到此为止,我假设大家电脑上已经开启了 telnet功能,正题开始。
telnet 他是一个基于tcp/ip 协议的程序,为我们用户提供一个 与其他电脑通信的工具,我们可以使用他来和其他电脑进行连接通信。
开始->运行->输入telnet回车, 出现一个黑框如下。
我们这时就可以输入命令,来连接远程主机,比如我们这次是要连接我们自学去论坛 的服务器,
那么我们就输入 open www.zixue7.com 80 然后回车。
open 是打开的意思 后面跟上 要打开那个主机 然后 后面跟上端口, web服务器默认使用的是80端口,所以 要加上80端口(不加端口 telnet默认是23端口)。
然后会出现下图的情况,这时候 我们就可以输入命令了,输入的命令都将被发送到自学去论坛的服务器上面。大家注意一下 下图红色箭头所指出的部分,那里就是一个输入光标,不用管其他的字。
这就代表 我们已经和远程主机连接上了,就相当于我们上节课中 客户端执行到 connect 函数 之后 就是要调用 send函数发送数据了,在这里 我们只需要按键盘输入到黑色窗口中 就会发送到服务端。
我们依次输入以下内容,(注意,不能按退格,输入错误了,就重新打开telnet,重新操作。)
⑵ 如何运用C语言读取任意一个html
1. 首先定义一个File 的变量
2.然后用
FILE *fopen(
const char *filename,
const char *mode
);
这个函数读入 html 文件
3.用这个读入文件内容
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
4.之后进行字符数组的处理
⑶ 怎样使用C语言接收网页的信息
C语言打开网络
#include<stdio.h>
#include<winsock.h>
#pragmacomment(lib,"ws2_32.lib")
voidmain()
{
char*host="www..com";
WSADATAdata;
//winsock版本2.2
interr=WSAStartup(MAKEWORD(2,2),&data);
if(err)
return;
//用域名获取对方主机名
structhostent*h=gethostbyname(host);
if(h==NULL)
return;
//IPV4
if(h->h_addrtype!=AF_INET)
return;
structin_addrina;
//解析IP
memmove(&ina,h->h_addr,4);
LPSTRipstr=inet_ntoa(ina);
//Socket封装
structsockaddr_insi;
si.sin_family=AF_INET;
si.sin_port=htons(80);
si.sin_addr.S_un.S_addr=inet_addr(ipstr);
intsock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
connect(sock,(SOCKADDR*)&si,sizeof(si));
if(sock==-1||sock==-2)
return;
//发送请求
charrequest[1024]="GET/?st=1HTTP/1.1 Host:";
strcat(request,host);
strcat(request," Connection:Close ");
intret=send(sock,request,strlen(request),0);
//获取网页内容
intisstart=0;
while(ret>0)
{
constintbufsize=1024;
char*buf=(char*)calloc(bufsize,1);
ret=recv(sock,buf,bufsize-1,0);
printf("%s",buf);
free(buf);
}
closesocket(sock);
WSACleanup();
return;
}
⑷ 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语言编写读入并读取一个文件,按照下面的要求编写程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp,*ok;
char str1[80],str2[80];
if((fp=fopen("d:\file.txt","r+"))==NULL)//打开d盘下名为file的文本文件;
{
puts("file文件打开失败!");
exit(0);
}
else
puts("file文件打开成功");
if((ok=fopen("d:\file1.txt","r"))==NULL)//打开d盘下名为file1的文本文件;
{
puts("file1文件打开失败!");
exit(0);
}
else
puts("file1文件打开成功");
/*__________________*/
scanf("%[^!]",str1);//输入一串字符,以!为结束标志;
fprintf(fp,"%s",str1);//将字符串str1写入指针fp所指向的文件;
fscanf(ok,"%s",str2);//读取指针ok指向的文件,将内容以字符串的形式存储在数组str2中 ;
puts(str2);
/*__________________*/
fclose(fp);//关闭文件;
fclose(ok);
return 0;
}
⑹ 怎么通过C语言实现对网页上面的数据的读取
有一个叫做curl的工具,提供各种函数,其中包括http访问的函数,可以通过该工具抓取网页数据。
⑺ 用C如何读取一个网页内容
首先,用读取已知文件名的本机文件不是问题吧?那问题实质是在获取URL表示的文件,特别是获取远程WWW服务器以URL表示的文件,把它存放到本机。
有一个API函数叫 URLDownloadToFile(), 用起来特简单。只要一句:
URLDownloadToFile(NULL, url, filename, 0, NULL);
其中url是你需要的文件,filename是下载到本机后的本地文件名。例如:
URLDownloadToFile(NULL, "http://127.0.0.1/1.txt", "C:\\temp\\1.txt", 0, NULL);
下面处理C:\temp\1.txt就可以了。
这个函数在urlmon.h中有说明;需使用urlmon.lib. 有关参数意义请自己查。好像最后一个参数是指定回调函数,可以检查下载状态。但我从来没指定过。从远程站点一次下载很多文件时特别好用。我曾经用它循环起来,一次下载两千多个SWF文件。
但要注意:较大的文件不一定下载完全;有些站点可能检查链接源,限制下载。
⑻ 请问怎么用C语言打开这样的本地网址并且读取里面的文件谢谢!
%s中不能有空格的。 对于这个 应该是没有什么太好的办法,能做到一句搞定。 你可以逐个读入数据,当遇到#title#时开始读,依次读到数组
⑼ c语言读取文本文件
1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。
2、例程:
#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.txt","r");//打开输入文件
FILE*fp2=fopen("output.txt","w");//打开输出文件
if(fp1==NULL||fp2==NULL){//若打开文件失败则退出
puts("不能打开文件!");
rturn0;
}
fscanf(fp1,"%d",&a);//从输入文件读取一个整数
b=fgetc(fp1);//从输入文件读取一个字符
fgets(c,100,fp1);//从输入文件读取一行字符串
printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
fputs(c,fp2);//向输出文件写入一行字符串
fputc(b,fp2);//向输出文件写入一个字符
fprintf(fp2,"%d",a);//向输出文件写入一个整数
fclose(fp1);//关闭输入文件
fclose(fp2);//关闭输出文件,相当于保存
return0;
}
⑽ C语言读取文件数据
先用getline或fgets读取数据到一个字符串中,这个串定义的长一点,保证够用就行。
举例:回
char str[1024]。
fgets( str , sizeof(str), fp ),//fp打开的答文件指针。
然后调用for循环去读取串的的数据,假设你的分隔符是空格,遍历str,遇到空格就得到一个数据,然后继续遍历,直到str尾。
再去fgets数据,再遍历,即可得到所有的数据。
C语言是一门通用计算机编程语言,广泛应用于底层开发。
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。