我需要檢查GPS設備通信協議與記錄服務器的兼容性。該應用程式允許你執行一個測驗,將發送的幀與它所支持的協議進行比較,并檢查是否有可能通過已經支持的協議來讀取這個幀。為了這個目的,我想使用共享測驗,但我得到一個錯誤。 https://github.com/traccar/traccar/blob/master/tools/test-integration.py
```。
import sys
import os
import xml.etree.ElementTree
import urllib
import urllib.parse
import urllib.request as urllib2
import json
import socket
import time
訊息 = {
'gps103' : 'imei:123456789012345,help me,1201011201,,F,120100.000,A,6000.0000,N,13000.0000,E,0.00,;'
}
baseUrl = 'http://172.16.43.210:8082'/span>
user = { 'email' : 'admin', 'password' : 'admin' }
debug = '-v' in sys.argv
def load_ports()。
ports = {}。
dir = os.path.dirname(os.path.abspath(__file__) )
root = xml.etree.ElementTree.parse(dir 'default.xml').getroot()
for entry in root.findall('entry') 。
key = entry.attrib['key']
if key.endwith('.port')。
ports[key[:-5]] = int(entry.text)
if debug:
print('
埠。%s
' % repr(ports))
return ports
def login()。
request = urllib2.Request(baseUrl '/api/session')
response = urllib2.urlopen(request, urllib.parse.urlencode(user))
if debug:
print('
登錄。%s
' % repr(json.load(response)))
return response.headers.get('Set-Cookie')
def remove_devices(cookie)。
request = urllib2.Request(baseUrl '/api/devices'/span>)
request.add_header('Cookie', cookie)
response = urllib2.urlopen(request)
data = json.load(response)
if debug:
print ('
設備:%s
' % repr(data))
for device in data:
request = urllib2.Request(baseUrl '/api/devices/' str(device['id'])
request.add_header('Cookie', cookie)
request.get_method = lambda: 'DELETE'。
回應 = urllib2.urlopen(request)
def add_device(cookie, unique_id)。
request = urllib2.Request(baseUrl '/api/devices'/span>)
request.add_header('Cookie', cookie)
request.add_header('Content-Type', 'application/json')
設備 = { 'name' : unique_id, 'uniqueId' : unique_id }
response = urllib2.urlopen(request, json.dumps(device) )
data = json.load(response)
return data['id']
def send_message(port, message)。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1'/span>, port))
s.send(message)
s.close()
def get_protocols(cookie, device_id)。
params = { 'deviceId' : device_id, 'from' : '2000-01-01T00:00:00. 000Z', 'to' : '2050-01-01T00:00:00.000Z' }
request = urllib2.Request(baseUrl '/api/positions?' urllib.urlencode(params) )
request.add_header('Cookie', cookie)
request.add_header('Content-Type'/span>, 'application/json'/span>)
request.add_header('Accept', 'application/json')
回應 = urllib2.urlopen(request)
協議 = []
for position in json.load(response)。
protocols.append(position['protocol'] )
return protocols
ports = load_ports()
cookie = login()
remove_devices(cookie)
設備 = {
'123456789012345' : add_device(cookie, '123456789012345') 。
'123456789012' : add_device(cookie, '123456789012') 。
'1234567890' : add_device(cookie, '1234567890') 。
'123456' : add_device(cookie, '123456') 。
'1234' : add_device(cookie, '1234')
}
all = set(ports.keys() )
protocols = set(messages.key() )
print ('Total: %d'/span> % len(all)
print ('Missing: %d' % len(all - protocols)
print ('Covered: %d' % len(協議))
#if all - protocols:/span>
# print'
缺少:%s
'% repr(list((all - protocols)))
for protocol in messages:
send_message(ports[protocol], messages[protocol])
time.sleep(10)
for device in devices。
protocols -= set(get_protocols(cookie, devices[device])
print ('Success: %d' % (len(messages) - len(protocols) )
print ('Failed: %d' % len(協議))
if protocols:
print ('
失敗:%s'% repr(list(protocols)>)
```
我得到了這個錯誤:
我得到了這個錯誤。
File "C:UsersISUITDesktopEw.Prac t.py", line 159, in <module>
cookie = login()
檔案 "C:UsersISUITDesktopEw.Prac t.py", 行 112, in login
response = urllib2.urlopen(request, urllib.parse.urlencode(user))
檔案"C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0liburllib
equest.py",第214,in urlopen
return opener.open(url, data, timeout)
檔案"C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0liburllib
equest.py",第514,in open。
req = meth(req)
檔案 "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0liburllib
equest.py",第1277行,indo_request_
raise TypeError(msg)
型別錯誤。POST資料應該是bytes,一個bytes的迭代器,或者一個檔案object。它不能是type str。
我試著使用bytes(string, 'utf-8'),但它不起作用
uj5u.com熱心網友回復:使用string.encode('utf-8')將型別轉換為bytes。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/320479.html
標籤:
