2015-07-28 117 views
0

我目前正在用Python編寫一個腳本,它允許從連接的設備上聆聽串行端口,以便在通過門時猜測一個人的身高。 最後的想法是通過http請求將此信息發送給Piwik,一個網絡分析包。 的代碼如下:爲什麼我的Python請求沒有被服務器註冊?

import serial, httplib, uuid 
arduino = serial.Serial('/dev/ttyACM0', 9600) 
while True: 
    data = arduino.readline() 
    print data 
    conn = httplib.HTTPConnection("my-domain.com") 
    conn.request("HEAD","/piwik/piwik.php?idsite=1&rec=1&action_name=Entree-magasin&uid="+str(uuid.uuid4())+"&e_c=entree-magasin&e_a=passage&e_n=taille&e_v="+str(data)+"") 
    print conn.request 

時,我只問打印以下行:

"/piwik/piwik.php?idsite=1&rec=1&action_name=Entree-magasin&uid="+str(uuid.uuid4())+"&e_c=entree-magasin&e_a=passage&e_n=taille&e_v="+str(data)+"" 

它工作正常。但是如果我查看託管我的網站的服務器的日誌,則不會發送請求。 如果我刪除以下部分"&e_c=entree-magasin&e_a=passage&e_n=taille&e_v="+str(data)+",那麼它工作正常,併發送請求。 如果我留下以下部分&e_c=entree-magasin&e_a=passage&e_n=taille&e_v="+str(data)+"並用數字硬編碼下面的值+str(data)+,那麼請求也被髮送。

我真的沒有問題的地方。如果任何人都可以提供幫助,那會很棒。

在閱讀完你的答案並繼續努力之後,我找到了一種通過使用請求函數來優化我的代碼的方法,但結果仍然相同,我無法在我的請求中獲得str(data)值:

import serial, requests, uuid arduino = serial.Serial('/dev/ttyACM0', 9600) while True: data = arduino.readline() print data r = requests.get('http://my-domain.com/piwik/piwik.php?idsite=1&rec=1&action_name=Entree-magasin&uid='+str(uuid.uuid4())+'&e_c=entree-magasin&e_a=passage&e_n=taille&e_v='+str(data)+'') print r

+0

看起來它依賴於將'data'轉換爲字符串。什麼是數據?結果字符串可以與其他字符串連接嗎? – wiseveri

+0

數據是一個介於205和100之間的範圍數字。 – Nanor

回答

0

嘗試下面的代碼,這些參數都沒有頭

resp, content = h.request("http://my-domain.com/piwik/piwik.php?idsite=1&rec=1&action_name=Entree-magasin&uid="+str(uuid.uuid4())+"&e_c=entree-magasin&e_a=passage&e_n=taille&e_v="+str(data), "GET") 
+0

不確定我是否正確,是否表示我的最終代碼是:https://gist.github .com/NanorPiwik/bbebe1b9e7837df89ad2#file-my-http-request-issue我嘗試了不同的配置,並通過h或未定義的請求或響應或內容 – Nanor

0

的一部分,我想我想通了。我試圖做同樣的事情,但使用谷歌分析而不是Piwik。它適用於谷歌分析,str(數據)可以在系統內正常恢復,但由於某種原因,它不適用於Piwik :(

相關問題