2012-06-18 40 views
2

我只是檢查我的網站空間,它的簽名說:阿帕奇/ 2.2.9(Debian的)的mod_python/3.3.1的Python/2.5.2的mod_ssl/2.2.9的OpenSSL/0.9.8g如何在我的webspace上使用python執行JSONP ..?

這給了我希望的Python以某種方式支持。爲什麼python列出兩次? mod_python/3.3.1和Python/2.5.2

我的webspace上有一個cgi-bin文件夾。

我想做什麼:我需要做一個跨站點調用來從服務器獲取一些文本數據。文本數據不是JSON,但我想我應該將其轉換爲JSON(或者有沒有JSON跨站點的選項?)

python腳本獲取某些JSONP的請求。根據請求(我想我應該以某種方式解析URL)python腳本是從Web服務器加載一個請求的文本數據文件,並將其包裝在一些JSON中並返回它。

有人可以告訴我如何在web空間上使用python執行這三個步驟?

回答

2

首先,簽名沒有列出python兩次。它的第一個版本是mod_python,它是一個Apache web服務器插件,然後它列出了系統上的python解釋器的版本。

python cgi module - 這實際上是一種編寫python服務器代碼的低效方法,但在這裏。最終,你應該考慮在那裏的許多驚人的Python Web框架之一。但是,使用CGI模塊,你的反應總是會與此開始:

print 'Content-Type: application/json\n\n' 

你的Python腳本會從HTTP請求在服務器上運行。在該腳本中,您將檢查請求並根據URL值或查詢字符串確定要提供的數據。

至少你會把你的返回值包裝在一個基本的JSON數據結構中。文本數據本身可以只是一個字符串:

import json 
text_data = "FOO" 
json_data = json.dumps({'text': text_data}) 
print json_data 
# {"text": "FOO"} 

對於JSONP方面,你通常會檢查查詢字符串是否請求包含一個特定的名稱爲客戶想的回調函數,或者只是默認「回調」

print "callback(%s);" % json_data 
# callback({"text": "FOO"}); 

返回,這將是一個JSONP類型的響應,因爲,當客戶端接收它,回調是爲客戶端執行。最後,讓我補充一點,你應該知道,python cgi腳本將需要爲每個請求啓動一個全新的python解釋器進程(甚至是來自同一個客戶端的重複請求)。這可能會在負載增加的情況下輕易淹沒服務器。出於這個原因,人們通常會使用wsgi路由(在Apache中爲mod_wsgi)。 wsgi允許持久應用程序繼續運行,並處理正在進行的請求。

+0

謝謝!也許我應該這樣做,然後使用PHP,因爲mod_python效率非常低。 Python或PHP可以允許緩存嗎?每次請求都會傳輸相當多的數據。通常我會提供靜態文件,但我需要解決SOP問題。 我想我不能允許用戶請求http://mydomain.com/files/file4234.txt,並且請求結束在PHP腳本,該腳本發回包裝在JSONP中的文件的內容?我猜這樣的事情會允許緩存?! 此時每個請求都會再次傳輸相同的數據。我真的需要做一些緩存。 – user1436889

+0

mod_python與cgi不一樣。 Cgi是效率最低的。 mod_python更持久(更像mod_php)。緩存將是你的apache服務器的一個功能。或者至少在你的腳本中設置一些緩存標題,讓瀏覽器在客戶端執行。我不知道你有多少訪問這臺服務器。 – jdi

相關問題