文章目录
1.http 客户端-RPC客户端 1.http 服务端-RPC服务端 3.WireShark抓包分析 3.1客户端到服务端的HTTP/JSON报文 3.2服务端到客户端的HTTP/JSON报文
1.http 客户端-RPC客户端
import json
import requests
class RPCClient :
def __init__ ( self, server_url) :
self. server_url = server_url
def call ( self, method, params) :
request_data = {
'method' : method,
'params' : params,
'id' : 1
}
json_data = json. dumps( request_data) . encode( 'utf-8' )
response = requests. post( self. server_url, json_data, headers= { 'Content-type' : 'application/json' } )
result = response. json( )
if 'error' in result:
raise Exception( result[ 'error' ] )
return result[ 'result' ]
client = RPCClient( 'http://192.168.1.9:8000' )
result = client. call( 'add' , [ 3 , 5 ] )
print ( "Result:" , result)
1.http 服务端-RPC服务端
import json
from http. server import BaseHTTPRequestHandler, HTTPServer
class RPCHandler ( BaseHTTPRequestHandler) :
def do_POST ( self) :
content_length = int ( self. headers[ 'Content-Length' ] )
json_data = self. rfile. read( content_length) . decode( 'utf-8' )
print ( "-------json_data:{}" . format ( json_data) )
data = json. loads( json_data)
print ( "-------data:{}" . format ( data) )
result = self. process_request( data)
self. send_response( 200 )
self. send_header( 'Content-type' , 'application/json' )
self. end_headers( )
print ( json. dumps( result) . encode( 'utf-8' ) )
self. wfile. write( json. dumps( result) . encode( 'utf-8' ) )
def process_request ( self, data) :
if 'method' in data:
method = data[ 'method' ]
if method == 'add' :
if 'params' in data and len ( data[ 'params' ] ) == 2 :
a, b = data[ 'params' ]
result = a + b
return { 'result' : result}
return { 'error' : 'Invalid request' }
def run_server ( ) :
port = 8000
server_address = ( '192.168.1.9' , port)
httpd = HTTPServer( server_address, RPCHandler)
httpd. serve_forever( )
if __name__ == '__main__' :
run_server( )
3.WireShark抓包分析
3.1客户端到服务端的HTTP/JSON报文
3.2服务端到客户端的HTTP/JSON报文