PHP从python请求编写wierd字符
我有一个python脚本:PHP从python请求编写wierd字符,php,python,sql,serial-port,Php,Python,Sql,Serial Port,我有一个python脚本: #!/usr/bin/python import time import datetime import serial from time import strftime import urllib2, urllib datetimeWrite = (time.strftime("%Y-%m-%d ") + time.strftime("%H:%M:%S")) ser = serial.Serial( port='/dev/ttyUSB0',
#!/usr/bin/python
import time
import datetime
import serial
from time import strftime
import urllib2, urllib
datetimeWrite = (time.strftime("%Y-%m-%d ") + time.strftime("%H:%M:%S"))
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 4800,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.SEVENBITS,
timeout=10 ## Tempo de espera para leitura
)
card=ser.read(size=16)
if len(card) == 16:
result=card
else:
result="20ERROR20"
id = 1
mydata=[('idLeitor','1'),('leitura',result),('time',datetimeWrite)]
mydata=urllib.urlencode(mydata)
path='http://0.0.0.0:8080/core/db.card.read.php'
req=urllib2.Request(path, mydata)
req.add_header("Content-type", "application/x-www-form-urlencoded")
page=urllib2.urlopen(req).read()
print page
result=''.join(e for e in result if e.isalnum())
print result
当我在控制台上的读卡器/dev/ttyUSB0上传递卡时,我得到以下信息:
20CD723CF720
我猜php写得不错,下面是我的php代码:
<?php
require 'db.connect.php';
$idLeitor = $_POST['idLeitor'];
$leitura = htmlspecialchars($_POST['leitura']);
$timestamp = $_POST['time'];
$leitura_ok = substr($leitura, 0, -2);
$leitura_ok = substr($leitura_ok, 2);
echo $leitura_ok;
$updateQry = "UPDATE CardReads SET leitura = '$leitura_ok', readTime = '$timestamp' WHERE id = '$idLeitor'";
$cardRead = sqlsrv_query($dbhandle,$updateQry);
if (!$cardRead) {
die( print_r( sqlsrv_errors(), true));
}
?>
我发现python确实发送了这些特殊字符,所以我在python脚本中这样做:
#!/usr/bin/python
import time
import datetime
import serial
from time import strftime
import urllib2, urllib
datetimeWrite = (time.strftime("%Y-%m-%d ") + time.strftime("%H:%M:%S"))
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 4800,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.SEVENBITS,
timeout=10 ## Tempo de espera para leitura
)
card=ser.read(size=16)
if len(card) == 16:
result=card
else:
result="20ERROR20"
id = 1
mydata=[('idLeitor','1'),('leitura',result),('time',datetimeWrite)]
mydata=urllib.urlencode(mydata)
path='http://0.0.0.0:8080/core/db.card.read.php'
req=urllib2.Request(path, mydata)
req.add_header("Content-type", "application/x-www-form-urlencoded")
page=urllib2.urlopen(req).read()
print page
result=''.join(e for e in result if e.isalnum())
print result
我发现python确实发送了这些特殊字符,所以我在python脚本中这样做:
#!/usr/bin/python
import time
import datetime
import serial
from time import strftime
import urllib2, urllib
datetimeWrite = (time.strftime("%Y-%m-%d ") + time.strftime("%H:%M:%S"))
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 4800,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.SEVENBITS,
timeout=10 ## Tempo de espera para leitura
)
card=ser.read(size=16)
if len(card) == 16:
result=card
else:
result="20ERROR20"
id = 1
mydata=[('idLeitor','1'),('leitura',result),('time',datetimeWrite)]
mydata=urllib.urlencode(mydata)
path='http://0.0.0.0:8080/core/db.card.read.php'
req=urllib2.Request(path, mydata)
req.add_header("Content-type", "application/x-www-form-urlencoded")
page=urllib2.urlopen(req).read()
print page
result=''.join(e for e in result if e.isalnum())
print result
我打赌在某个时刻,在
之外的一些PHP文件中有一个不可见的字符。可能是换行符或制表符。您可能应该解决这个问题,但如果您不希望答案中出现空格,也应该在python端删除答案:page=page.strip()
将删除页面的开头或结尾可能存在的空白字符。不过,也要修复PHP。(或者用一种不会在源文件末尾出现随机制表符和空行的语言重写它……在这里插入PHP仇恨)我认为情况并非如此。如果我改用pyton请求,那么会从Web服务器请求什么呢?2016-11-16 08:33:01 0.0.0 POST/core/db.card.read.php idLeitor=1&time=2016-11-16+08%3A33%3A00&leitura=%00%0220CD723CF7%03%02208080-0.0.0 python请求/2.12.0-200 0 15
在
之外。可能是换行符或制表符。您可能应该解决这个问题,但如果您不希望答案中出现空格,也应该在python端删除答案:page=page.strip()
将删除页面的开头或结尾可能存在的空白字符。不过,也要修复PHP。(或者用一种不会在源文件末尾出现随机制表符和空行的语言重写它……在这里插入PHP仇恨)我认为情况并非如此。如果我改用pyton请求,那么会从Web服务器请求什么呢?2016-11-16 08:33:01 0.0.0 POST/core/db.card.read.php idLeitor=1&time=2016-11-16+08%3A33%3A00&leitura=%00%0220CD723CF7%03%02208080-0.0.0 python请求/2.12.0-200 0 15
,这只是掩盖了根本问题,没有解决它。它可能会在将来的某个时候再次出现,如果你忘记了这一点,你就必须再次追查根本原因。这只是掩盖了潜在的问题,而不是解决它。它可能会在将来的某个时候再次咬人,如果你忘记了这一点,你将不得不再次追根溯源。