【教程向】不正经的Web讲师与简易Pascal教程
pascal吧
全部回复
仅看楼主
level 5
shyakocat 楼主
大家好初次见面,我是shyakocat。
那么这次其实要介绍的,是Web相关的。(但是shy其实并不会Socket,这帖会不会翻车啊)
本期教程只是开个头,因为shy的代码工程也没有竣工,只是中途随性透露下内容。
这个本来是shy用c#开的一个坑,稍微把一些简单的内容翻译成了Pascal,留下一些启示。有不懂的问题就尽情地自习吧,估计我也不会。。有错误或不准确的表达,请务必用红色的笔划出来告诉shy!如果和网上的教程有雷同,那么不用看了八成以上就是我抄袭的。以下将推出一些简单的样例,好好记住吧。
2017年06月05日 02点06分 1
level 5
shyakocat 楼主
(发帖被秒删好多次啊,把1楼本来要讲的内容续到这里吧。。)
相信之前有个叫139457820的已经和大家谈笑风生很多次了。
这次要讲的,说得直白点只是http的内容口牙。那么这有什么用呢?嗯。。你可以,
让程序上网采集资料(爬◆虫),
让贴吧自动签到(外◆挂),
让百度云不给你限速(破◆解),
让一个网站增加巨量的负荷(黑◆客)……
其实上面说的,我全都不会哦。。反正不要把【网络编程】这件事想得那么坏啦。
Power by shyakocat
2017年06月05日 02点06分 2
以下的内容,系统可能会时不时删掉一些。。已经尽力压缩语言,排除网址了
2017年06月05日 03点06分
本来还是准备了一些东西的,结果被百度删得很严重。对登录百度、POST的分析(签到、使用百度中的物品等)、bilibili的api等可能讲不下去了。而且我的代码还是C#为重;这帖就改成【交流向】好了。。。
2017年06月05日 04点06分
@shyakocat 你可以做成PPT打包放到百度云[滑稽][滑稽][滑稽]
2017年06月05日 13点06分
@炎▫龙 其实发帖前已经写到doc里了。考虑以后有需要可以发在qq里,但是直接是C#的。
2017年06月05日 14点06分
level 5
shyakocat 楼主
样例一(入门):
我们先说一说在线翻译。比如有道,他提供了一些网络接口,供程序猿更方便地食用。
好了,根据上面有道提供的网页所讲,啊,只要照着访问它的网址就可以了吧。
没错就是这样。但是还有一些要注意的地方。
首先,网址里可不会有中文出现的(当然,有的时候你能看到中文,那是因为百度是CP936的编码)。所以,我们需要一个函数URLEncode(显然你相对的可以想到肯定有个函数叫URLDecode)。这个写起来不难,我们只要把一个【汉字】替换成%【十六进制】【十六进制】这种形式就可以了;此外,在查询操作中,我们要把空格’ ‘替换成加号’+’(有的时候空格是替换成#20的)。实现如下:
注意:uses Sysutils;
function URLEncode(consts:ansistring;InQueryString:boolean):ansistring;
var
Res:ansistring='';
space:char;
i:longint;
begin
ifInQueryString then space:='+' else space:=#20;
fori:=1 to length(s) do
cases[i] of
'A'..'Z','a'..'z','0'..'9','-','_','.':Res:=Res+s[i];
'':Res:=Res+space;
else Res:=Res+'%'+IntToHex(ord(s[i]),2)
end;
exit(Res)
end
2017年06月05日 03点06分 9
因为太长的一段回帖会被秒删,所以,shy分开来发了,也除去了很多课外知识的内容[茶杯]
2017年06月05日 03点06分
有道api的网址是:htt[茶杯]p://fanyi.youdao.com/openapi?path=data-mode
2017年06月05日 04点06分
level 5
shyakocat 楼主
好了,这部分还算简单。那么我们接下来就要向服务器提交请求了。
为了方便,free pascal自己就带了一个fphttpclient库(来自fcl-web)。官网上有些小介绍,也可以看github。
提交请求后,服务器就会返回一段字符串,一般,可以认为他是json或html或xml等。这边我们样例里用的是返回json。pacsal自己就带了方便的处理json的库,但是坏消息是pascal的json是不能处理中文的。那么我们可以自己处理json。json,就是一个通用的记录数据的代码,格式非常简单,基本上一看就知道他到底是什么意思了。举个荔枝:我们查询shy。返回结果如下:
2017年06月05日 03点06分 12
level 5
shyakocat 楼主
好了,大功告成!这样,我们就可以通过网络,获取翻译结果了!可以翻译句子哦。如果想翻译其他语言,编码没问题就都可以
但是这个网址不一定一直可以用,1年后说不定就不维护了。还要注意不要一次性发太多太快,这样服务器会封ip、或者加验证码。
2017年06月05日 03点06分 16
level 5
shyakocat 楼主
样例二(入门):
有些时候啊,我们总喜欢上网下载写小东西。那么,我们能不能用自己的代码,获取网上的内容呢。当然啦。
我们可以想到WinAPI是个无所不能的东西。确实,WinAPI里有个叫WinINet的东西,自己就集成了很多网络功能如http、ftp等。我们甚至可以用它实现网页的基本操作POST和GET。在Pascal中,只要uses wininet;即可使用wininet.dll里的很多功能。
uses Classes,WinInet;
function Download(url:pchar;filename:string):boolean;
const
bufsize=1024;
var
hSession,hOpenUrl:HINTERNET;
buf:array[0..bufsize-1]of byte;
dwRead,dwResult:DWORD;
stdout:file of char;
begin
Download:=false;
hSession:=InternetOpen('',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
if hSession=nil then exit;
hOpenUrl:=InternetOpenUrl(hSession,Url,nil,0,0,0);
if hOpenUrl=nil then exit;
assign(stdout,filename); Rewrite(stdout,1);
dwRead:=1;
while dwRead>0 do
begin
InternetReadFile(hOpenUrl,@buf,bufsize,dwRead);
BlockWrite(stdout,buf,bufsize)
end;
close(stdout);
InternetCloseHandle(hOpenUrl);
InternetCloseHandle(hSession)
end;
2017年06月05日 04点06分 17
调用Download(下载的网址,输出的文件)即可。可以下载一些网上的图片、程序、文档、压缩包之类的。
2017年06月05日 04点06分
level 7
lz
加油!我支持你!(因为我不会)
2017年06月05日 09点06分 18
百度很凶残啊。。删我无数次;不知道原因地被删了很多。。
2017年06月05日 10点06分
2017年06月05日 11点06分
level 7
前排
Orz orz orz orz[真棒]
2017年06月05日 09点06分 19
level 10
大哥什么叫初次见面,你不是那个做计算器的么
2017年06月05日 12点06分 22
额。。那个BUG满满的东西我都不想承认是我做的了
2017年06月05日 13点06分
level 5
shyakocat 楼主
2017年06月11日 09点06分 23
C#WPF做的用来评论的程序。算是Web编程的小纪念
2017年06月11日 09点06分
level 9
这些函数库都是原来就有的吗
2017年07月27日 01点07分 24
1