首页 > 技术文章 > 5-16 get和post

roc2000 2019-05-16 17:24 原文

安装和删除python包

安装 pip install 包名

删除 pip uninstall 包名

查看  pip list

查看已安装包信息 pip show 包名

https就是http加上ssl

 

cookie和session,Token的区别

cookie其实是一份小数据,是服务器响应给客户端叫set-cookie里面,并且存储在客户端的一份小数据。下次客户端访问服务器时,会自动带上这个Cookie。服务器通过Cookie就可以区分客户端。

 

session的原理
1:当用户注册后
2,在本地生成cookie文件,保留用户信息
3,用户登录
1,系统检查本地是否存在cookie文件
若不存在,等待登录后,
在本地创建cookie文件
2,若已存在,系统在用户登录的同时,由服务器端口自动随机分配一个sessionID传入cookie文件
4,若用户打开某个需要权限设置的页面,系统回去检查对应的sessionID是否存在有效正确

cookie与session的区别:

1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session



 

请求和响应

 

 

 

Get的请求参数都在请求行里 --可以在Webforms的QueryString查看

post请求参数可以是请求行的参数QueryString+body

 

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

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

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

3xx:重定向--要完成请求必须进行更进一步的操作 301- 永久重定向 302- 临时重定向 304- 用到缓存,请求服务端资源未改变,用本地未过期缓存

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 //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

 

 

import requests

# get 请求 url + params请求参数
url = "http://japi.juhe.cn/qqevaluate/qq"

# params  建议单独拿出来
par = {
    "key": "8dbee1fcd8627fb6699bce7b986adc45",
    "qq": "295424589"
}
r = requests.get(url, params=par)   # 发请求
print(r.status_code)  # 状态码
print(r.text)          # raw 文本内容
a = "hello"
# j = '{"error_code":0,"reason":"success"}'  # json格式格式字符串,和字典有区别
# b = {"error_code":0,"reason":"success"}    字典
# print(j)
# print(b)
# type函数
print(type(r.text))  # str  json是一个比较特殊的字符串
print(r.json())   # .json()  自带的json解析器,将json解析成字典,r是一个字符串
print(r.json()['reason'])   #

print(r.url)
print(r.encoding)  #查看他的编码格式
print(r.cookies)    # RequestsCookieJar格式,实际上就是一个cookie对象,可以转换成字典
print(r.cookies['aliyungf_tc'])  cookiesjar取值
cook = dict(r.cookies)  #cookjar转换成字典
print(cook)
print(cook['aliyungf_tc'])  

 

 什么时候需要传headers参数?

headers那么多参数,哪个是需要的?

ssl问题:

加verify=False

Response返回内容

 

 

get代码

 

import requests

url="http://japi.juhe.cn/qqevaluate/qq"
par={
    "key":"8dbee1fcd8627fb6699bce7b986adc45",
    "qq":"793708874"
}
h={
    "Host": "japi.juhe.cn",
    "Connection":"keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cookie": "JuheChannel=jHwww-juhe-cn; Hm_lvt_5d12e2b4eed3b554ae941c0ac43c330a=1555570461,1557903119,1557992821; PHPSESSID=fj8ib3bn8oce8i5k9fspi8tc40; Hm_lpvt_5d12e2b4eed3b554ae941c0ac43c330a=1557992840; XSRF-TOKEN=eyJpdiI6ImZsZURRWkJRaUhUaGxEZGFNeTJzREE9PSIsInZhbHVlIjoiM1ZTUExsMlJ3dVwvdXQwVFZTTEJzTTRBSDZlZ1R2VExzVTNST0o2WFo0MnE5S21vRTlUenNJVHFRWG5vbURFNGx0ekdpY0d2MzRDbG5uUm1KXC9aYWQxUT09IiwibWFjIjoiZjYxM2M0N2YyODk4YThjNWMyMzI3N2U2ZGVlYjU5NGZkZjNmMmM2ZTUzNjgyYzYyMDY1YWMwNmI0YTVhNTFjMCJ9; juhe_cn_session=eyJpdiI6IlRueTVOUGhJRHZcL2syOTF4T1NkZ1NRPT0iLCJ2YWx1ZSI6ImtNVWgxd21MOVlrZzJITjlGMDVyYWRCZHFxeVZCRTI1b2RqXC9VYlVOTFVPOE5jRWswdDM0Q3hUOW9ERndFazFBeklLWXVMb1lzYjJGalUxakwrR0dsdz09IiwibWFjIjoiMDhmZDg1NjYzY2EwYjgwNjM0OTU5ZWRiOTAzY2IwNmVkODQzNTkxMjk5N2M1YTU4ZGRhOTIzNDZmMGQwYzAzNiJ9"
}
r=requests.get(url,params=par,headers=h)
print(r.text)        #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
print(r.status_code)    #返回的状态码
print(r.content.decode("utf-8"))        #字节方式的响应体,会自动为你解码 gzip 和 deflate,是否需要content在提交请求时不要加上Accept-Encoding: gzip, deflate
print(r.headers)   #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
print(r.url)
print(type(r.cookies))    #RequestsCookieJar
print(r.cookies["aliyungf_tc"])
cook = dict(r.cookies)    #RequestsCookieJar转为字典格式
print(cook)
print(cook["aliyungf_tc"])
print(r.encoding)   # response的编码格式
print(r.json())     # json() 自带的json解析器,解析成字典
print(r.json()['result'])   #通过键值对取值

 




post代码

 post参数放在什么位置,抓包看一下,如果在请求行,那就是params,如果在请求body,那就是date,如果两个地方都有,那就paramshe和date里面都写

post请求中

      content-type:application(阿普雷kei神)/json  {“key1“:”value1”,“keyt2":“value2"}

                      application/x-www-form-urlencoded(url应扣丁):name1= value1&name2=value2

                     multipart/form-data:这一种是表单格式的 (文件上传 file=,图片上传等,表单提交混合式)

                     Content-Type:octets/stream (文件下载) data=

      text/xml data=

当content-type是application(阿普雷kei神)/json时,requests.post(url,json=body),print(r.json())

当content-type是 application/x-www-form-urlencoded(url应扣丁)时,requests.post(url,date=body),print(r.text),gat的content-type请求均是 application/x-www-form-urlencoded]

import requests

url = "http://www.example.com/"

h = {
"Content-Type": "application/json"
}

body = {
"key": "8dbee1fcd8627fb6699bce7b986adc45",
"qq": "283340479"
}
# "Content-Type": "application/json" 传json=
r = requests.post(url, headers=h, json=body)
print(r.text)

 

从上一个页面获取cookies

import requests
from lxml import etree

url = "http://47.104.190.48:8000/xadmin/"

r = requests.get(url)

# 需要获取cookies
cooks = r.cookies
print(cooks)  # RequestsCookieJar

demo = etree.HTML(r.text)
nodes = demo.xpath('//*[@name="csrfmiddlewaretoken"]')
csrfmiddlewaretoken =nodes[0].attrib['value']
print(csrfmiddlewaretoken)


# post请求
body = {
    "csrfmiddlewaretoken": csrfmiddlewaretoken,
    "username": "root",
    "password": "root",
    "this_is_the_login_form":1,
    "next": "/xadmin/"
}
h = {
    "Content-Length": "155",
    "Cache-Control": "max-age=0",
    "Origin": "http://47.104.190.48:8000",
    "Upgrade-Insecure-Requests": "1",
    "Content-Type": "application/x-www-form-urlencoded",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Referer": "http://47.104.190.48:8000/xadmin/",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    }

r1 = requests.post(url, data=body, headers=h, cookies=cooks)

 

111

 

推荐阅读