2013-06-26 64 views
3

我想用客戶端python腳本連接到我的Django服務器。現在我只是試圖連接到一個視圖,並檢索HttpResponse。細如何使用Python的urllib編碼POST數據

import urllib2 
import urllib 

url = "http://localhost:8000/minion/serve" 
request = urllib2.Request(url) 
response = urllib2.urlopen(request) 
html = response.read() 
print html 

以下工作但是如果我將其更改爲

import urllib2 
import urllib 

url = "http://localhost:8000/minion/serve" 
values = {'name': 'Bob'} 
data = urllib.urlencode(values) 
request = urllib2.Request(url, data) 
response = urllib2.urlopen(request) 
html = response.read() 
print html 

我得到urllib2.HTTPError: HTTP Error 500: INTERNAL SERVER ERROR。我在這裏做錯了什麼?這裏是我試圖遵循的教程,http://techmalt.com/?p=212http://docs.python.org/2/howto/urllib2.html

編輯:試圖進行以下更改按That1Guy的建議(其他線路左同)

request = urllib2.Request(url, data) 
response = urllib2.urlopen(request, data) 

這像以前一樣返回相同的錯誤消息。

編輯:它似乎工作,如果我改變我正在查看的頁面,所以錯誤不在客戶端腳本。因此,鑑於這一啓示,以下是正在訪問的服務器端視圖:

def serve(request): 
    return HttpResponse("You've been served!") 

正如您所看到的,它非常直截了當。

編輯:經過測試以查看是否可能由於缺少csrf標記而導致內部錯誤,但csrf_exempt裝飾器未能解決錯誤。

+0

在您的瀏覽器中,嘗試'http:// localhost:8000/minion/serve?name = bob'並查看會發生什麼 – karthikr

+0

將'data'傳遞給'urlopen'。 – That1Guy

+0

@karthikr工作正常,給出預期的輸出 – avorum

回答