TCP、FTP、对应的客户端和服务端、API请求和响应(日常记录)

参考​​​​​​​​​​​​​​​​​​​​:Flask 获取客户端GET请求_TCatTime的博客-CSDN博客_flask get请求

Python(六十三)页面分析、HTTP原理和响应 - 简书

python3 flask接收数据处理_18923489164的博客-CSDN博客

FTP:(pyftpdlib)有原文参考链接

1.设置站点

https://jingyan.baidu.com/article/4dc40848b041cc89d846f113.html

2.Python实现FTP服务器和客户端_墨痕诉清风的博客-CSDN博客_ftp python

开启服务

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
 
# 新建一个用户组
authorizer = DummyAuthorizer()
# 将用户名,密码,指定目录,权限 添加到里面
authorizer.add_user("fan", "root", "E:/", perm="elr")  # adfmw
# 这个是添加匿名用户,任何人都可以访问,如果去掉的话,需要输入用户名和密码,可以自己尝试
authorizer.add_anonymous("E:/")
 
handler = FTPHandler
handler.authorizer = authorizer
# 开启服务器
server = FTPServer(("127.0.0.1", 21), handler)
server.serve_forever()

3.客户端

主要接收(暂时我还没有用客户端接收)

import ftplib
import sys
 
#获取服务器的ip地址(如192.168.1.107),使用sys.argv可以从命令行参数里面获取
if len(sys.argv) < 2:
    tmp = input("please input server address:")
    sys.argv.append(tmp)
server_address = sys.argv[1]
#创建FTP实例,并显示欢迎界面
ftp = ftplib.FTP(server_address)
print(ftp.getwelcome())
#登录,输入服务器里添加过的用户名和口令
ftp.login('user', 'pass')
 
#文件上传
def upload(fname):
    fd = open(fname, 'rb')
    new_name = input("input new name:")
    #以二进制的形式上传
    ftp.storbinary("STOR %s" % new_name, fd)
    fd.close()
    print("upload finished")
    
#文件下载
def download(fname):
    #构建文件的存储路径,这里用的是D盘,可以自行设置
    new_path = "D:\\FTPdownload\\" + fname
    fd = open(new_path, 'wb')
    #以二进制形式下载,注意第二个参数是fd.write,上传时是fd
    ftp.retrbinary("RETR %s" % fname, fd.write)
    fd.close()
    print("download finished")
 
def main():
    #选择操作,上传、下载、退出
    op = input("what do you want?(u/d/q)")
    if op == "u":
        #输入文件完整路径,必要时可以用绝对路径
        fname = input("input the file of path:")
        upload(fname)
    elif op == "d":
        fname = input("input the file name:")
        download(fname)
    else:
        print("quit now!")
    ftp.quit()
 
if __name__ == '__main__':
    main()

https://www.jb51.net/article/65276.htm

TCP主要是socket创建链接,设置ip和端口号

TCP服务器程序(tsTserv.py):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

from socket import *

from time import ctime

HOST = ''

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)

tcpSerSock.bind(ADDR)

tcpSerSock.listen(5)

while True:

  print 'waiting for connection...'

  tcpCliSock, addr = tcpSerSock.accept()

  print '...connected from:', addr

  while True:

    data = tcpCliSock.recv(BUFSIZ)

    if not data:

      break

    tcpCliSock.send('[%s] %s' %(ctime(), data))

  tcpCliSock.close()

tcpSerSock.close()

TCP客户端程序(tsTclnt.py):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

from socket import *

HOST = 'localhost'

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)

tcpCliSock.connect(ADDR)

while True:

  data = raw_input('> ')

  if not data:

    break

  tcpCliSock.send(data)

  data1 = tcpCliSock.recv(BUFSIZ)

  if not data1:

    break

  print data1

tcpCliSock.close()

python+tcp实现客户端交互_qq_46105093的博客-CSDN博客_python tcp客户端

1.client
客户端的基本流程:

1.初始化socket()

2.使用ip和端口号connect()连接服务器

3.使用recv()接收数据,send()发送数据与服务器进行交互

代码如下(示例):

import socket
 
client = socket.socket()
 
client.connect(('127.0.0.1',9044))  #连接服务器
 
while True:
    msg = input(">>:").strip()
    if len(msg) == 0 :continue
    client.send(msg.encode())   #发送数据
 
    data = client.recv(1024)    #接收数据
 
    print("返回数据:",data.decode())
 
2.server
服务器端的基本流程:

1.初始化socket()

2.使用bind()绑定ip和端口号

3使用listen()监听消息

4.获取客户端的套接字地址accept()

5.使用recv()接收数据,send()发送数据与客户端进行交互

代码:

import socket
import re
server = socket.socket()             #初始化
server.bind(('127.0.0.1',9044))      #绑定ip和端口
 
server.listen(5)                     #监听,设置最大数量是5
print("开始等待接受客户端数据----")
while True:
    conn,addr = server.accept()      #获取客户端地址
    print(conn,addr)
    print("客户端来数据了")
    while True:
        data = conn.recv(1024)       #接收数据
        print("接受的数据:",data)
        d=data.decode('utf-8')
        print(d)
        # print(d[0],d[1],d[2])

        if not d or d=='exit':
            print("client has lost")
            conn.close() 
        elif d=='dady':
                conn.send((d+',i am from %s:%s.' % addr).encode('utf-8'))    #返回数据
        elif ' ' in d:
                m=d.split()[1]
                n=d.split()[0]
                print(m,n)
                a=re.findall(m,n)
                print(a)
                conn.send(str(a).encode('utf-8'))
        elif '+'in d:
                try:
                    # print(i)
                    a=eval(d)
                    conn.send(str(a).encode('utf-8'))
                except Exception as e:
                    print('wrong{}'.format(type(e)))
        elif '-'in d:
            try:
                # print(i)
                a=eval(d)
                conn.send(str(a).encode('utf-8'))
            except Exception as e:
                print('wrong{}'.format(type(e)))
        elif '*'in d:
            try:
                # print(i)
                a=eval(d)
                conn.send(str(a).encode('utf-8'))
            except Exception as e:
                print('wrong{}'.format(type(e)))
        elif '/'in d:
            try:
                # print(i)
                a=eval(d)
                conn.send(str(a).encode('utf-8'))
            except Exception as e:
                print('wrong{}'.format(type(e)))
        else:
            conn.send(str(d).encode('utf-8'))

FLASK       

1.设置请求回应,浏览器输入http://0.0.0.0:8090/time就可以看到OK

请求这个URL也会得到OK

python3 flask接收数据处理_18923489164的博客-CSDN博客

from flask import Flask
import time 
app = Flask(__name__)
 
@app.route('/')
def index():
    return "Hello pyhon"

@app.route('/time')
def t():
    #now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime())
    #return now

        return "OK"

@app.route('/get/<name>')# 访问http://127.0.0.1:8090/get/563249423 就会返回我提交的数据
def get(name):

    return "<h1>提交的数据为: {0}</h1>".format(name)
if __name__=="__main__":
    app.run(host="0.0.0.0", port=8090)
 

2.请求一般是requests.get或者requests.post两大类

例如:

import requests
 
formdata = {
    "type":"AUTO",
    "i":"i love python",
    "doctype":"json",
    "xmlVersion":"1.8",
    "keyfrom":"fanyi.web",
    "ue":"UTF-8",
    "action":"FY_BY_ENTER",
    "typoResult":"true"
}
 
url = "http://0.0.0.0:8090/time"
 
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
 
response = requests.post(url, data = formdata, headers = headers)
 
print (response.text)#打印是OK

python 爬虫 - 学习 urllib 和 requests 使用,模拟请求_AudiA6LV6的博客-CSDN博客_python模拟网页请求
import requests
 
formdata = {
    "type":"AUTO",
    "i":"i love python",
    "doctype":"json",
    "xmlVersion":"1.8",
    "keyfrom":"fanyi.web",
    "ue":"UTF-8",
    "action":"FY_BY_ENTER",
    "typoResult":"true"
}
 
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
 
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
 
response = requests.post(url, data = formdata, headers = headers)
 
print (response.text)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值