本文主要講述如何使用Python發送protobuf數據。
安裝protobuf
tar zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1 ./configure make make install
安裝成功。
// 查看protoc版本 protoc --version
python安裝protobuf
cd protobuf-2.6.1/python python setup.py build python setup.py install
環境搭建完畢,下面給個demo。
創建my_bidding.proto
package tutorial; message Person { required string name = 1; optional int32 age = 2; repeated BankCard bankcard = 3; message BankCard { required string id = 1; } optional RealEstate estate = 4; message RealEstate { required string address = 1; optional int32 value = 2; } optional bool isSingle = 5; optional SexualOrientation orientation = 6; enum SexualOrientation { ManOnly = 1; WomanOnly = 2; BiSexual = 3; } }
編譯proto文件
protoc -I=. --python_out=. ./my_bidding.proto
編譯成功,會產生my_bidding_pb2.py。
編寫Python腳本
# python2 # coding = utf-8 import my_bidding_pb2 import httplib person = my_bidding_pb2.Person() person.name = 'logan' person.age = 25 person.isSingle = False person.orientation = 3 bankcard1 = person.bankcard.add() bankcard1.id = '100' bankcard2 = person.bankcard.add() bankcard2.id = '101' real_estate = person.estate real_estate.address = 'beijing' real_estate.value = 1000 print person data = person.SerializeToString() CONTENT_TYPE = "application/octet-stream" CONTENT_TYPE_HEADER = "Content-type" conn = httplib.HTTPConnection('sever_host', 'server_port') conn.request('POST', 'server_path', data, {CONTENT_TYPE_HEADER: CONTENT_TYPE}) response = conn.getresponse() print response print response.status print response.read()
