程序员软件测试python库中文参考及测试开发(自动化性能接口安全测试运维等)

python web渗透测试学习2Web应用交互2访问web工具

2018-07-19  本文已影响104人  oychw

Requests是Python基于Apache2 Licensed许可证的人性化HTTP库。

Python标准库中urllib2提供了不少HTTP 功能,但API不系统。它有点过时,完成最简单的任务也需要大量工作。

状态码:

import requests

payload= {'url':'https://china-testing.github.io/address.html'}
r=requests.get('http://httpbin.org/redirect-to',params=payload)
print("Status code:")
print("\t *" + str(r.status_code))

执行结果

Status code:
     *200

自定义头:

import requests

myheaders={'user-agent':'Iphone 6'}
r =  requests.post('http://httpbin.org/post',data={'name':'packt'})
print(r.url)
print('Status code:')
print('\t[-]' + str(r.status_code) + '\n')

print('Server headers')
print('****************************************')
for x in r.headers:
    print('\t' + x + ' : ' + r.headers[x])
print('****************************************\n')

print("Content:\n")
print(r.text)

执行结果

$ python3 Video-3-headers.py 
http://httpbin.org/post
Status code:
    [-]200

Server headers
****************************************
    Connection : keep-alive
    Server : gunicorn/19.8.1
    Date : Tue, 17 Jul 2018 22:00:10 GMT
    Content-Type : application/json
    Content-Length : 340
    Access-Control-Allow-Origin : *
    Access-Control-Allow-Credentials : true
    Via : 1.1 vegur
****************************************

Content:

{"args":{},"data":"","files":{},"form":{"name":"packt"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"10","Content-Type":"application/x-www-form-urlencoded","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"json":null,"origin":"120.229.3.164","url":"http://httpbin.org/post"}

跳转:

import requests

url='http://httpbin.org/redirect-to'
payload = {'url':'https://china-testing.github.io'}
req = requests.get(url,params=payload)
print("Response code: " + str(req.status_code))
for x in req.history:
    print(str(x.status_code) + ' : ' + x.url)

执行结果

Response code: 200
 * 302 : http://httpbin.org/redirect-to?url=https%3A%2F%2Fchina-testing.github.io

可爱的python测试开发库 请在github上点赞,谢谢!
python中文库文档汇总
接口自动化性能测试线上培训大纲
python测试开发自动化测试数据分析人工智能自学每周一练
[雪峰磁针石博客]python3标准库-中文版

更多内容请关注 雪峰磁针石:简书

image.png

HTTP状态码

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。所示的消息短语是典型的,但是可以提供任何可读取的替代方案。 除非另有说明,状态码是HTTP / 1.1标准(RFC 7231)的一部分。

HTTP状态码的官方注册表由互联网号码分配局(Internet Assigned Numbers Authority)维护。

微软互联网信息服务 (Microsoft Internet Information Services)有时会使用额外的十进制子代码来获取更多具体信息,但是这些子代码仅出现在响应有效内容和文档中,而不是代替实际的HTTP状态代码。

1xx消息

这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。 这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动。

2xx成功

这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

3xx重定向

这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

当且仅当后续的请求所使用的方法是GET或者HEAD时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A→B→C→……→A或A→A),因为这会导致服务器和客户端大量不必要的资源消耗。按照HTTP/1.0版规范的建议,浏览器不应自动访问超过5次的重定向。

4xx客户端错误

这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

如果错误发生时客户端正在传送数据,那么使用TCP的服务器实现应当仔细确保在关闭客户端与服务器之间的连接之前,客户端已经收到了包含错误信息的数据包。如果客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个重置数据包,以清除该客户端所有还未识别的输入缓冲,以免这些数据被服务器上的应用程序读取并干扰后者。

前称“Request-URI Too Long”,表示请求的URI长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。通常将太多数据的结果编码为GET请求的查询字符串,在这种情况下,应将其转换为POST请求。这比较少见,通常的情况包括:

本应使用POST方法的表单提交变成了GET方法,导致查询字符串过长。

重定向URI“黑洞”,例如每次重定向把旧的URI作为新的URI的一部分,导致在若干次重定向后URI超长。
客户端正在尝试利用某些服务器中存在的安全漏洞攻击服务器。这类服务器使用固定长度的缓冲读取或操作请求的URI,当GET后的参数超过某个数值后,可能会产生缓冲区溢出,导致任意代码被执行。没有此类漏洞的服务器,应当返回414状态码。

5xx服务器错误

表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。这些状态码适用于任何响应方法。

参考资料
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
https://baike.so.com/doc/5328824-5563996.html
https://zh.wikipedia.org/wiki/HTTP状态码
[雪峰磁针石博客]python外部库介绍-requests:人性化的HTTP

上一篇下一篇

猜你喜欢

热点阅读