网络中常见概念
# 理解为 网址
# 结构
# 协议://ip地址:端口号/文件相关路径
# 例子
# http://www.baidu.com:80/index.html
# HTTP:超文本传输协议 80
# HTTPS:更安全的超文本传输协议 443
# FTP:文件传输协议
# 超文本:电影,音乐,图片....
# http://www.ivsky.com/
# http://www.baidu.com
# https://www.baidu.com
# IP:InternetProtocal 网络协议
# IP地址: 例如192.168.1.1
# IP地址有两个版本 IPv4 IPv6
# 全球60亿*2 = 120亿个IP地址
# IPv4 192.168.1.1 四个部分组成,每个部分的范围是0-255,理论上可使用255^4=40亿
# IPv6 全球每颗沙子都能分配一个ip 2^128
# 域名DomainName
# 例如: baidu.com
# 域名是IP的一个别称
# 百度IP 111.13.100.92
# 百度域名 baidu.com
# 为什么域名和IP能够对应起来?
# DNS:DomainNameSystem 域名解析系统
# 常用的DNS有哪些?
# 8.8.8.8:是Google提供的免费DNS服务器的IP地址
# 114.114.114.114:是国内第一个、全球第三个开放的DNS服务地址
# 技术贴
# 想查看国外网站,需要"翻墙"
# 墙:中国对国外信息封杀的一堵墙
# 手段1:使用软件,例如蓝灯
# 手段2:用vpn
# 手段3:手动修改hosts文件
# 客户端 client
# 例如:手机/平板/电脑/.......
# qq,微信,.....
# 服务器 server
# 给客户端提供服务器的机器
# 例如:百度服务器,腾讯/阿里/京东..都有自己的服务器
# 我们的手机/平板/电脑也是服务器
# 注意:如果你的手机访问别人的东西,那么它是客户端
# 如果别人通过访问你的手机可以获取消息,那么它是服务器
# 因此客户端和服务器之间没有明显界限,取决于应用场景
# 服务器:日常说的一般是大型的设备
# 特点:存储空间很大, 内存比较大, CPU个数比较多.....说白了就是电脑
# 用电脑玩LOL 一般开两个会比较卡
# 用服务器玩LOL 开10个不成问题,一般服务器运行起来是不能关闭的,服务器所在房间是需要配空调的
# 自己可以从网上租一个服务器
# 自己搭建一个服务器,使用命令 python -m http.server 81
# 请求 request
# 响应 response
# 客户端 通过 请求 向 服务器发送数据
# 服务器 通过 响应 向 客户端返回数据
# 请求的结构
# 请求行: 请求方法 请求地址 HTTP/1.1
# 例如 GET /index.html HTTP/1.1
# 请求头:
# Host:域名
# User-Agent:一般用于模拟不同的设备去发请求
# Cookie: cookie可以存储用户一些信息,我们可以用它来模拟登录
# 空行
# 请求数据
# 响应结构
# 响应行:版本 状态码 短语
# 1.1 200 ok
# 响应头
# 空行
# 响应数据
# ==================================
# 常用状态码
# 1xx
# 2xx:一般表示成功
# 3xx:一般表示重定向
# 4xx:一般表示客户端错误
# 5xx:一般表示服务器错误
# 200 表示成功
# 404 服务器无法找到被请求页面
# 403 服务器拒绝访问权限不够 Forbidden
# 500:请求未完成,服务器遇到不可预知的情况
# 302:
# 常用的请求方法
# GET/POST
# 其它方法:PUT/DELETE/OPTION/HEAD
# GET:一般用于请求网页,获取数据(对于数据库的查)
# POST:一般用于上传数据,表单提交(登录/注册/上传头像....)(对应增)
# DELETE:一般用于删除数据/文件(对应删)
# PUT:一般用于更新数据(对应改)
# 面试题
# GET和POST的区别
# 1. 参数位置
# GET:参数一般位于URL后面
# POST:参数一般位于请求体中
# 2. 数据长度
# GET:长度有限制
# POST:长度理论上没限制,实际上取决于服务器的处理能力
# 3. 安全性
# POST相对于GET安全一些,但是两者都不安全
# 例如 10块的保险柜 和 15的保险柜
# 4. 应用场景
# GET:一般用于获取数据
# POST:一般用于上传数据
# 5. 以上全部都是大众说法,但是在我看来,网络协议中并没有规定上述特征
==========================================================================
requests基本用法
# import urllib# import urllib2
# import urllib3
# import http
import requests
import json
# 服务器向客户端返回的数据格式有哪些?
# url http://api.map.baidu.com/telematics/v3/weather?请求参数
# DNS 域名解析服务 把域名转换为ip地址再进行访问 DNS 114.114.114.114 8.8.8.8
# JSON/XML
# 1. 使用requests发送get/post/put/delete等请求
# GET参数
# URL?参数1=内容1&参数2=内容2....
# 注意:参数部分不能出现空格或者特殊字符
# 请求报文 请求行(请求方法\请求地址\协议版本) 请求头(User-Agent,Cookie,Host...) 空行 请求数据
# 响应报文 响应行(协议版本\状态码(200\302\404\403\500)\状态短语) 响应头(Set-Cookie) 空行 响应数据
response = requests.get("http://api.map.baidu.com/telematics/v3/weather?location=郑州市&output=json&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&callback=?")
# print(response.content)
response = requests.get("https://www.baidu.com/s?wd=python")
# rs_dict = json.loads(response.text)
# print(response.content)
response = requests.get(
"https://www.baidu.com/s",
params={
"wd": "python"
}
)
# print(response.content)
# 参数1:url
# 参数2:data,类似于params
# 参数3:json
# 参数4:**kwargs
'''
<RequestsCookieJar[<Cookie gpsd=e681613e81ffe1a7f5b8d0c3c295eb99 for .chouti.com/>, <Cookie puid=91142b3c207b2730c81c8172dd51c282 for .chouti.com/>, <Cookie JSESSIONID=aaacHl6r6SQGEgpBhdrhw for dig.chouti.com/>, <Cookie route=0c5178ac241ad1c9437c2aafd89a0e50 for dig.chouti.com/>]>
'''
response = requests.post(
"http://dig.chouti.com/login",
data={
"phone": "8615896901897",
"password": "qweqweqwe1",
"oneMonth": "1"
},
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0",
}
)
# f = open("chouti.html", "wb")
# f.write(response.content)
# f.close()
print(response.text)
# response = requests.put()
# response = requests.delete()
========================================================================