⑴ 怎麼通過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語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。