HTTP编程—完结

4.4.4客户端和服务器端交互

HTTP1.0定义了3种请求方法:GET、POST、HEAD;HTTP1.1新增5种请求方法:PUT、DELETE、CONNECT、OPTIONS、TRACE。

GET:请求指定的页面信息,并返回实体主体。

POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

PUT:从客户端向服务器传送的数据取代指定的文档的内容。

DELETE:请求服务器删除指定的页面。

CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS:允许客户端查看服务器的性能。

TRACE:回显服务器收到的请求,主要用于测试或诊断。

HTTP响应(Reponce)的状态码:

1xx:指示信息--表示请求已接收,继续处理。

2xx:成功—表示请求已被成功接收、理解、接受。

3xx:重定向—要完成请求必须进行更进一步的操作。

4xx:客户端错误—请求有语法错误或请求无法实现。

5xx:服务器端错误—服务器未能实现合法的请求。

常见状态码:

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized  //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden   //服务器收到请求,但是拒绝提供服务

404 Not Found      //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

使用WireShark或fiddler抓HTTP协议包,如下所示:

 

上图红色部分是HTTP客户端请求(GET),蓝色部分是HTTP服务器端响应(200 ok表示请求成功)。

常用的请求有GET和POST,区别如下:

GET请求:

GET /books/?name=Professional%20Ajax HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
POST请求:
POST / HTTP/1.1 //请求行

Host: www.wrox.com //2-7行是请求头部

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Content-Type: application/x-www-form-urlencoded

Content-Length: 40

Connection: Keep-Alive
(----此处空一行----) //空行

name=Professional%20Ajax&publisher=Wiley //请求数据,即HTTP消息主体

这是我从网上找的2个例子。当我们发送一些数据请求时,如用户名、密码,GET请求是放入URL中发送的;而且GET请求是可被缓存的,参数保留在浏览器历史中。因此会被爬虫爬走一些关键性的数据。

若使用POST请求,数据是存放在HTTP消息主体中发送的;且POST请求不会被缓存,参数不会保存在浏览器中。因此使用POST请求更加安全。

参考博客:https://www.cnblogs.com/ranyonsue/p/5984001.html

4.4.5 CURL编程

在win10平台下,使用vs2017编译CURL。

(1)在https://curl.haxx.se/download.html下载源码。

(2)解压后,放入D盘,进入D:\curl-7.62.0\winbuild,并复制其文件夹路径。

(3)打开开始菜单,找到vs2017,若编译64位,则选择”适用于VS 2017的x64本机工具命令提示”;若编译32位,则选择”适用于VS 2017的x86本机工具命令提示”。在这里,我们选择编译64位。

(4)进入命令行后,输入cd D:\curl-7.62.0\winbuild,进入winbuild目录;然后输入命令nmake /f Makefile.vc mode=static VC=15 MACHINE=x64 ENABLE_IDN=no DEBUG=no,等待即可。注:这里一定要加上ENABLE_IDN=no,不然它会按照ENABLE_IDN=yes来编译,代码运行后会出现”无法解析的外部符号 __imp__IdnToAscii@20,该符号在函数 _curl_win32_idn_to_ascii 中被引用”和”无法解析的外部符号 __imp__IdnToUnicode@20,该符号在函数 _curl_win32_ascii_to_idn 中被引用”这样的错误。

(5)若使用动态编译,则将”mode&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值