當前位置:首頁 » 編程語言 » c語言解析url
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言解析url

發布時間: 2023-05-14 20:11:51

① 在c語言中如何實現對編碼後的URL進行解碼

字元串與數字量的轉換,可以按照標準的編碼(如Unicode,utf8等等)進行編碼解碼。URL編碼就有編碼規則,解碼時就按既定的編碼規則進行就可以了。

② 用純C語言 怎樣編程,解析HTTP協議。

按照HTTP協議的規定,理清楚相關功能。
然後軟體模型的方式解釋HTTP的運行過程,可以使用UML語言。
然後將UML語言轉換成C語言即可。

③ c語言截取下載url中文件名稱

思路大概如下:將整個字元串及其長度傳給函數,然後在函數中用指針接收字元串,利用其長度把指針移到字元串結尾處,然後用循環不斷將指針向前移動,並判斷其指向的字元與/是不是一樣的,如果一樣退出循環,此時指針指向著字元串中最後一個/ 的前一個字元, 因此最後將指針再向前移2位到/後面的一個字元,最後反回指針, 再輸出返回的指針後面的內容就是名稱了

函數聲明:char* GetName(char*,int);
整個程序:
#include<stdio.h>
char* GetName(char*,int);
int main(void)
{
char str[] = "https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/logo-.gif";
char *name;
int n;
n = sizeof(str); //計算字元串的長度(包括'\0')
name = GetName(str,n); //把字元串及其長度傳給函數
printf("%s\n",name); //name就是那個名稱,可以輸出
return 0;
}

char* GetName(char*ptr,int n)
{
int i = n; //這里i只是為循環即使終止了也未找到/而准備
ptr+=n; //把指針移到字元串的尾部,即'\0'處
while(i-->0)
{
if((*ptr--) == '/') //指針不斷回移並判斷是否為/符號
{
break; //從後向前遇到第一個/後退出循環
}
}
ptr+=2;
return ptr; //反回最後一個/後面的字元串即名稱
}
函數原型:
char* GetName(char*ptr,int n)
{
int i = n;
ptr+=n;
while(i-->0)
{
if((*ptr--) == '/')
{
break;
}
}
ptr+=2;
return ptr;
}

④ 用c語言判斷網址怎麼做呢

/*
問題地址:http://..com/question/317437658.html

詳解:
標準的網址(URL)格式是這樣的:
http://user:pass@myserver:port/myapp1/myapp2/index.html?key1=value2&key2=value2#anchor
其中:
[1] http 是協議類型,同樣的還有 ftp 等。【可省略,一般瀏覽器默認都是 http】
[2] user 是用戶名,pass 是密碼。【可省略】
[3] myserver 可以是伺服器的 ip 或者域名,
如網路的 ip = 220.181.112.143 , 域名是:www..com
【這個不能省略】
[4] port 是埠。【可省略,一般默認都是 80】
[5] myapp1,myapp2 是應用程序目錄。【可省略】
index.html 是當前頁面【可省略,默認是 index.html,default.html 等】
[6] key1,value1,key2,value2 是傳遞給網站的參數,【可省略】
[7] anchor 是網頁內的錨點

合法的網址舉例:
www..com
http://__anglfish:[email protected]:80/
http://..com/question/311110938.html?an=0&si=1

判斷網址演算法:
最簡單的當然是正則表達式了。
我們看到標准網址(URL)的 7 個部分,有 6 個分割符號,分別是:
://
@
:
/
?
#
在瀏覽器裡面,只有第 3 部分是必須填寫的,也是我們日常寫的最多的。

用到的資源文件:
頭文件 deelx.h,可以到:http://www.regexlab.com/zh/deelx/下載
下載後放到和源程序同一個目錄下即可。
*/

#include <stdio.h>
#include "deelx.h"

int main(int argc, char * argv[])
{
char text[1000] = "http://user:[email protected]:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor";
// 判斷合法網址的正則表達式
static CRegexpT <char> regexp
(
"(([:alpha:]+)\\://)?((\\w+)\\:(\\w+)@)?(\\w+(\\.\\w+)*)(\\:(\\d+))?((/\\w+)*(\\.\\w+)?)?(\\?((\\w+=\\w+&)*(\\w+=\\w+)))?(#((\\w+)))?)"
);
int i;

printf("輸入一個網址:");
while(scanf("%s",text))
{
MatchResult result = regexp.Match(text);
if ( result.IsMatched() )
{
/*
for(i=0;i<result.MaxGroupNumber();i++)
{
printf("%d=%.*s\n", i,result.GetGroupEnd(i) - result.GetGroupStart(i), text + result.GetGroupStart(i));
}
*/

// 解析網址
printf("網址:%.*s\n", result.GetGroupEnd(0) - result.GetGroupStart(0), text + result.GetGroupStart(0));
printf("協議類型:%.*s\n",result.GetGroupEnd(2) - result.GetGroupStart(2), text + result.GetGroupStart(2));
printf("用戶名:%.*s\n",result.GetGroupEnd(4) - result.GetGroupStart(4), text + result.GetGroupStart(4));
printf("用戶密碼:%.*s\n",result.GetGroupEnd(5) - result.GetGroupStart(5), text + result.GetGroupStart(5));
printf("伺服器IP或域名:%.*s\n",result.GetGroupEnd(6) - result.GetGroupStart(6), text + result.GetGroupStart(6));
printf("伺服器埠:%.*s\n",result.GetGroupEnd(9) - result.GetGroupStart(9), text + result.GetGroupStart(9));
printf("應用程序目錄:%.*s\n",result.GetGroupEnd(10) - result.GetGroupStart(10), text + result.GetGroupStart(10));
printf("查詢參數:%.*s\n",result.GetGroupEnd(14) - result.GetGroupStart(14), text + result.GetGroupStart(14));
printf("錨:%.*s\n\n",result.GetGroupEnd(18) - result.GetGroupStart(18), text + result.GetGroupStart(18));

}
else
{
printf("\"%s\" 是一個非法的網址!!!\n",text);
}
printf("輸入一個網址:");
}

return 0;
}

/*
運行結果:

輸入一個網址:http://user:[email protected]:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor
網址:http://user:[email protected]:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor
協議類型:http
用戶名:user
用戶密碼:pass
伺服器IP或域名:myserver.com
伺服器埠:800
應用程序目錄:/myapp1/myapp2/index.html
查詢參數:key1=value1&key2=value2
錨:anchor
*/