php curl http 那些事

php curl 支持所有http协议支持的东西,比如简单的GET , POST , HEAD , PUT,DELETE, 稍微复杂一点的SSL,proxy,COOKIE  等操作。http超文本传输,   比如网站地址是 wwww.hhailuo.com(红海螺) , web服务器配置的根目录 /home/html 。 web服务器运行以用户/用户组为user/user运行。

以上面为前提,先讲讲GET , 举个最简单的GET

1.     用户: 我想要获取红海螺网站/home/html/ico.png 图片,如果user组具有权限 , 浏览器输入 www.hhailuo.com/ico.png.

服务器: 好的,给你。图片正文如下 xxxxx .

静态文件通常服务器直接发给用户了。

php curl GET :最简单的例子就是页面采集,通过curl 实现浏览器一样的GET行为。

2.     用户: 我想获取红海螺网站文章,id为3 .

服务器: 找你找的好辛苦,饶了一大圈才找到你,然后把文章id为3的文章发给用户.

php动态请求,就是说我请求 www.hhailuo.com/a.php . 从这个url中是看不出服务器要转发给用户内容,服务器要把www.hhailuo.com/a.php 解析了才会转发,也就是说可能中间有各种各样的通信,但只要请求存在,程序固定,红海螺网站文章id 为3的文本在红海螺服务器中固定了。

讲讲POST,举个简单例子

1 .  用户: 场景是用户注册,用户名为a9618211, 密码为 “你好” 等一些信息。 用户浏览器访问 www.hhailuo.com/User/login 填写表单,提交到 admin.hhailuo.com/User/Register 。

服务器:  好的,已经收到了你提交的数据,然后做相关的处理,转发或者不转发东西给用户,但可能会把用户提交的数据写数据库或者写文件,也就是存到文件或缓存。

php curl POST: 就是不通过浏览器要把文件,表单数据,文本,图片,视频等一些东西提交到指定的地方。 相对于浏览器操作有更强的灵活性,以及适应于很多应用场景。

应用场景就是查分系统,作为用户我需要登录才能查到自己的分数。比如用户A第一步登录,第二步点击某个url 查看分数,相当于请求了两次。大家都清楚http是无状态的请求协议,

第二次请求的时候,服务器怎么知道是用户A的请求呢。 从源头分析,访问服务器用的是浏览器。 对的,浏览器有标实用户的身份东西cookie文件 . 但cookie 又是怎样工作的呢。玩php的人

都知道,服务器会释放所有保存在内存和文件外的所以信息。 服务器中保存了session 文件.  关于浏览器中的cookie怎么找到session的呢,肯定是发起http请求的时候把cookie中保存的session作为tcp

的某个头部参数传递过去,然后服务器先验证用户的身份,再进行相关处理。   php curl 不是浏览器发起的行为,怎么办呢,有很多种方式处理,但主要的目的就是用curl 把cookie文件给包含进去 .

讲讲 HEAD

HEAD应该大家用的也非常多

HTTP header的学习非常重要,可能大家容易忽略。 简单介绍下我们经常用到的header .

讲讲浏览器和服务器之间消息传递的流程,内容主要包括message-header和message-body两部分。首先传递http-header 就是message-header消息 。http -header 消息通常被分为4个部分:general  header, request header, response header, entity header。通过header再判断message-body 是否需要传递。

先讲下keepalive ,应用场景:用户A 访问了a.php ,又访问了b.php , c.php 等等。那么问题来了,大家都知道HTTP是 TCP加了个头部,每次用户A输入浏览器请求都会和服务器端建立TCP长连接。

那么问题来了,一个网页可能有很多资源,比如图片,css文件,js文件,flash 等。 浏览器和服务器如果没有建立长连接,如果资源数过多,消耗在TCP连接的时间就太多了。  用户每次请求都需要建立连接。

需要深入了解的同学可以找找资料关于最大连接数以及过期时间一些东西的设置,为什么要这样做。

然后聊聊浏览器cache , 大多数情况下我们会很明显的感觉到访问同一个地址,第一次会比其后面访问慢很多,这就是浏览器cache .就是说我们很多资源都被缓存到浏览器了,比如图片,js文件,cs文件,flash等。但为什么程序员写代码的时候经常喜欢在文件名后面跟随其它的日期呢。 主要的原因还是担心服务器版本改了,浏览器一直用本地的版本。   从这里你应该能体会到先发header 信息,再拿消息体的好处了。通过后缀或者大小判断文件是否更新,更新了才传递消息体给用户,否则只需要传递header信息,通知用户没有更新,也就是常说的304
(If-Modified-Since) 用户是否在指定的时间内更新了文件。

聊聊浏览器压缩,因为浏览器是某个厂商制作的cpp应用程序,常用的压缩方式gzip , 也就是说传输消息体的时候可能会比较大,那么浏览器和服务器就商量好,我用某种算法把文件压缩了,你用解密算法把文件解压出来。这样

可以减少传输过程中消息体的大小。

聊聊浏览器编码,除了英语外浏览器可以支持其它的编码格式,如果每一个不同编码格式代表不同国家的文字。 比如我网页的编码是中国,你后端传一些法国的文字过来,我用中国的一些字符去匹配那肯定有很多事找不到的,因此就出现乱码了。 问题来了, 我们就需要建立一个编码公共库,把每个国家的所有文字都包含进去。对,这就是utf-8 .  现在明白乱码的原因了不。

写了很多了后续再详细讲解Header     ,   SSL,   proxy等一些相关的知识 .

小提

时间: 2024-10-08 13:52:16

php curl http 那些事的相关文章

shell的简单批量curl接口脚本

shell脚本可以说作用非常大,在服务器领域,用shell操作事务可比手动点击要方便快捷得多了.虽然只是文字界面,但是其强大的处理功能,会让各种操作超乎想象.而且,也可以将这些习惯移植到日常的工作当中,提升办事效率. 其实shell语法很简单,基本上就是综合一下在命令行下,一个个的命令集合,然后就组成了shell脚本.当然了,不懂语法的,百度搜索一下就好了嘛,毕竟,重要的是思想而非语法. 最近,刚接一需求,如下: DBA会将一些服务规则的数据导出,然后一条条手动去curl某应用接口,从而完成相应

PHP爬取糗事百科首页糗事

突然想获取一些网上的数据来玩玩,因为有SAE的MySql数据库,让它在那呆着没有什么卵用!于是就开始用PHP编写一个爬取糗事百科首页糗事的小程序,数据都保存在MySql中,岂不是很好玩! 说干就干!首先确定思路 获取HTML源码--->解析HTML--->保存到数据库 没有什么难的 1.创建PHP文件"getDataToDB.php", 2.获取指定URL的HTML源码 这里我用的是curl函数,详细内容参见PHP手册 代码为 <span style="fo

grep命令和curl命令的使用方法

今天看了汪海写的python爬虫教程,说实话看不懂...于是就用bash下的工具自己开始写了一个抓取糗事百科的糗事的脚本,期间搜索到了grep和curl命令的一些使用技巧. grep命令,使用grep命令来进行文本的通配,一般只是显示匹配的行,但是使用以下几个参数就可以显示上下文了: -C [num] #显示匹配行的上下各num行 -A [num] #显示匹配行的后num行 -B [num] #显示匹配行的前num行 curl这个下载工具,或者已经算不上是下载工具了,因为curl过于强大了,主要

php curl详细解析和常见大坑

1. 拿来先试试手 比如我们以著名的"测试网络是否连接"的网站--百度为例,来尝试下curl <?php // create curl resource $ch = curl_init(); // set url curl_setopt($ch, CURLOPT_URL, "baidu.com"); //return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //

PHP之curl

当我第一次接触curl的时候,看文档,以及网上search各种资料,官方(http://cn2.php.net/manual/en/intro.curl.php)的解释是,这是某大牛写的一个libcurl库,PHP支持该扩展库,允许我们以各种不同的协议(http.https.ftp.telnet.file...)访问各种不同的服务器,支持post.put.ftp或基于表单的文件上传,支持cookie.代理等等. 好像还是似懂非懂,我觉得最简单的解释是,curl是一个工具集,由libcurl扩展库

在win8/win8.1中wamp启动curl失败的解决方法

因为最近准备好好学习一下cURL,所以在我的win8.1本本上安装了一个wamp,安装完毕之后一切正常,准备操练一下cURL的时候,出现报错,说是没有定义curl_init();这个函数.用phpinfo()看了一下配置,果然没有发现加载cURL.检查了php.ini文件,配置确实没有错误,然后就在网上进行了搜索,发现还真是有不少同样的情况,他们说的解决办法也很多,什么修改这个配置那个配置了,把三个***.dll文件复制到system32文件夹下了,但是我的直觉是就是php_curl.dll文件

如何利用cURL和python对服务端和web端进行接口测试

工具描述 cURL是利用URL语法在命令行方式下工作的文件传输工具,是开源爱好者编写维护的免费工具,支持包括Windows.Linux.Mac等数十个操作系统,最新版本为7.27.0,但是我推荐大家使用7.26.0,从这里可以下载7.26.0版本. 以下是官方介绍的翻译: cURL是一个使用URL语法来传输数据的命令行工具,支持DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,POP3,POP3S,RTMP,RTSP,SCP,S

欲善其事必先利其器---Xcode插件

Xcode所有的插件都安装在目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ Alcatraz (用于管理xcode插件.管理Xcode工程模版以及颜色配置的功能) Quick Start: 1 mkdir -p ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins; 2 curl -L http://git.io/lOQWeA |tar xvz

cURL.1 手册页

摘自http://blog.csdn.net/huangxy10/article/details/45717793 名称 cURL - transfer a URL 摘要 cURL[选项] [URL... ] 描述 cURL 是一个向服务器或从服务器传输数据的工具,它支持HTTP .HTTPS. FTP .FTPS .SCP.SFTP.TFTP.DICT.TELNET.LDAP 或FILE 等协议. 该命令设计为无需用户干预即可执行. cURL 提供了一大堆诸如代理支持.用户认证.FTP 上传.