HTTP的请求和相应以及php实现模拟、curl扩展的使用来模拟访问

1.处理不同的图片格式 针对图片处理的公共类兼容多种图片类型的处理。

只要使用不同类型的图片使用不同的imagecreatefrom类型即可实现。

【重点!!!】 【php实现网络编程】 2.HTTP请求协议【HTTP权威指南已经看了,但是还没有深刻的认识】 HTTP用于规范b/s架构中,浏览器和服务器之间信息数据交换的规则。【超文本传输协议对应的(超文本标记语言和数据)】

浏览器和服务器之间建立的TCP连接【连接部分需要注意:三次握手已经不说。持久连接本身占用的资源问题(持久连接保证了HTTP传输的顺利)】

请求的报文信息【request】 (1)请求行【请求数据的第一行,内有三个信息组成:请求方式(http请求的方式:例如get),请求url,协议版本(http/1.1)】 (2)请求头【带浏览器发送请求里的一些状态码:进行标示等等:浏览器信息,cookie等等】【需要使用一个空行标示结束】 (3)请求主体【post方式传输数据时有主体】

所谓的网络编程就是使用语言来模拟HTTP请求和结果,实现我们需要的效果。

3.php模拟HTTP请求 在知道HTTP请求的报文之后,使用php来生成这样的请求来进行模拟。 【重点】 【爬虫也是这样通过脚本实现请求和响应结果】 php模拟get请求 (1)先连接上目标服务器【利用php函数:fsocketopen建立一个socket或者internet连接。需要使用ip和端口进行唯一识别】 (2)使用该函数连接服务器之后,返回一个资源【stream流】 对资源和连接有一个比较清晰的认识。【关键是连接,而连接占用服务器资源的问题需要对服务器方面学习】 (3)连接之后,使用请求的报文进行模拟【php生成报文信息】 (4)发送请求【利用刚刚建立的stream数据通道,以及fwrite写入到目标服务器上】

于是便实现了php模拟一个HTTP请求。【而php脚本又需要浏览器请求才能够运行,所以这里用来模拟HTTP请求的脚本相当于做了一层中间层】

php来接收响应结果: 使用fgets来接受响应数据【一行行的接收。也是stream的流】 【使用循环来接收fgets的结果:显示全文(使用feof来判断是否到了数据流的结尾)】

4.HTTP响应信息 响应信息: 【响应行】:协议版本,状态码,状态消息【状态码和状态消息是对应的:用来表示响应结果】 状态码: 200:状态正常 300:请求被重定向 400:not found 500:server内部错误 【响应头】:服务器需要告知浏览器的一些信息【例如文件类型等等】【多行表示,还需要一个空行标示响应头结束】 【相应主体】:在浏览器中用来显示的文件都是相应主体。

【HTTP报文中需要的换行都需要使用在任何系统中都是换行的\r\n】

5.php操作响应结果 利用header函数来操作响应头【响应结果中的cookie也可以进行设置】【下载的本质是将原本从服务器上传输过来的数据保存起来(而不是显示):通过响应头来(header函数)管理。(通过header对文件的类型和是否打开进行管理便能实现下载)】 利用echo来操作响应主体【这个不需要太多说,直接输出即可处理】

6.php模拟post请求【也就是操作请求主体!!】 利用php来模拟一次表单提交。 键值对的形式来形成请求主体的格式。

只不过在HTTP中的信息中,通过空行来区别,和HTTP的机制本身并没有关系。【只不过需要在请求头里标示请求主体的必要信息:主体类型,主体长度等进行主体限制】 最后使用fwrite来实现数据的发送。

【重点】 7.curl 【用于专门来模拟HTTP请求,实现各种请求的方式】 【是一个独立的工具:是一个扩展】【php_curl.dll】 curl提供了很多函数来实现HTTP请求的模拟工作

一整套的函数需要注意使用。 【因为现在的请求基本需要cookie和session,所以curl也需要带着这些会话信息进行模拟请求】

因为有这样的模拟的过程,所以我们使用验证码防止暴力破解。【通过遍历的方式来确定用户的密码】

8.

时间: 2024-07-31 19:33:24

HTTP的请求和相应以及php实现模拟、curl扩展的使用来模拟访问的相关文章

允许asp.net MVC报 错说明: 访问服务此请求所需的资源时出错。服务器可能未配置为访问所请求的 URL。错误消息 401.2。: 未经授权

运行mvc3程序报以下错误详细报错如下: "/"应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未经授权: 服务器配置导致登录失败.请验证您是否有权基于您提供的凭据和 Web 服务器上启用的身份验证方法查看此目录或页.请与 Web 服务器的管理员联系以获得其他帮助. 版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.3

php使用curl扩展请求HTTPS链接报sslv3 alert 错误

报错信息 使用php的curl请求https链接时报"error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure" 错误 原因分析 使用php的curl扩展时,curl_setop的CURLOPT_SSLVERSION取值为3,对应协议为ssl v3,因为之前的POODLE 病毒爆发,许多网站禁用了sslv3(nginx默认是禁用的,ssl_protocols 默认值为TLSv1 TLSv1.1 T

微信开发第2章 通过appid appsecret获取accesstoken

通过 appid appsecret是可以获取accesstoken的 ,请不要一直获取,不然会把token的机会浪费掉,获取到后7200秒后失效,建议保存为6000秒到7000秒左右,具体可以查看微信接口文档 http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183&token=&lang=zh_CN 下面这几段话很重要: 公众平台的API调用所需的access_token的使用及生成方式说明: 1.为了保密

HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结

HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET /data/info.html HTTP/1.1 方法字段就是HTTP使用的请求方法,比如常见的GET/POST 其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别: HTTP1.0对于每个连接都的建立一次连接一次只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Ho

短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求

图形验证码+ip(用户id)+https http://www.cnblogs.com/han-1034683568/p/7040417.html 前言 承接前文<短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜>,在解决了短信发送的问题后,长长地舒了口气,也就各忙各的事情去了,本以为应该是个完美的收场,哪知道只是泥泞道路的前一段,收场是收不了了,还是要去应付接下来的烂摊子,因为攻击者并没有停止攻击,虽然恶意请求已经可以被识别并且不会被业务服务器处理,也不会去触发短信发送接口,但是请

Spring MVC HTTP请求地址映射

package com.springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annota

什么是跨域请求

昨晚在帮朋友解决问题的时候,遇到了一个问题,经过百度又让我理解了一个东西叫做:跨域请求.这个词其实不是第一次听到和看到,但是之前没有去细想,今晚将查找到的资料总个小总结. 浏览器均默认开启了同源策略,它指Ajax请求所在的页面和被请求的页面在协议.域名.端口均相同才能被访问,否则会提示如下错误: XMLHttpRequest cannot load xxxxxxx is not allowed by Access-Control-Allow-Origin. 之前还想过为什么,后来突然就明白了,很

php模拟post请求发送文件

由于项目需要,需要本地服务器接收数据后,再将数据转发到另外一台服务器上,故要用到模拟post请求发送数据,当然数据中也包含文件流. curl是php比较常用的方式之一,一般代码如下: $params1 = "test"; $params2 = "@".$absolute_path;//如果是文件 则参数为"@"+绝对路径 $post_data = array( 'params1' => $params1, 'params2' => $

模拟HTTP请求超时时间设置

HTTP请求有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间(请求资源超时时间). 使用curl命令行 连接超时时间用 --connect-timeout 参数来指定 数据传输的最大允许时间用 -m 参数来指定 例如: curl --connect-timeout 10 -m 20 "http://XXXXXXX" 连接超时的话,出错提示形如: curl: (28) connect() timed out! 数据传输的最大允许时间超时的话,出错提示形如: curl: