2011-06-18 16 views
9

Üzerinde çalıştığım RESTful bir arabirimi test etmeye çalışıyorum (bunu kullanıyorum: codeigniter-restserver) ve Python'u kullanmak istiyorum.Python'dan POST'ları olan bir RESTful API'sini sınama

GET s çalışıyor gibi görünüyor, ama ben POST s ile sorun yaşıyorum. Ben bu kütüphanenin & çıkışları hakkında sormuyorum, sadece POST python ile nasıl test edileceğini öğrenmek için sadece çalışıyorum.

import httplib, urllib 

params = urllib.urlencode({ 
    'sentence':  'esta es una frase', 
    'translation': 'this is a sentence' 
}) 

headers = { 
    "Content-type": "application/x-www-form-urlencoded", 
    "Accept":  "text/plain" 
} 

conn = httplib.HTTPConnection("localhost:80") 
conn.request("POST", "/myapp/phrase", params, headers) 

response = conn.getresponse() 
print response.status, response.reason 

data = response.read() 
conn.close() 

POST ing test etmek için bir yol olarak yeterli Bu komut mı: Bu elimdeki nedir? Bunu yapmak için GUI araçları arayanlar hakkında çok sayıda istek gördüm (Firefox eklentileri, etc) ama benim için ilk önce RESTful bir uygulama oluşturmanın tüm noktasında bir komut dosyası oluşturabileceğim bir API var. db'yi hızla değiştirmek için. (Bir JSON dosyasından veri ile doldurun, ne olursa olsun.)

Bu Python tabanlı yaklaşımla doğru yolda mıyım?

Teşekkür

cevap

2

POST genellikle daha yüksek seviyede işlev urllib2 aracılığıyla yapılır. httplib doğrudan yazma

headers = {'User-Agent': user_agent} 

data = urllib.urlencode(values) 
req = urllib2.Request(url, data, headers) 
response = urllib2.urlopen(req) 
+1

Bu bağlantı öldü! –

+1

kaldırılmış bağlantıyı kaldırdı. –

21

ince ama oldukça düşük seviyesidir.

Requests modülüne bakın. Http istekleri oluşturmak ve göndermek için çok basit ve pythonik bir yaklaşımdır.

import requests 

requests.post(url, data={}, headers={}, files={}, cookies=None, auth=None) 
+0

Teşekkürler, bu bilmek güzel. –

0

da istekleri için sadece bir sarıcı ama mesela çağırmak için elverişli kılan Nap var HTTP API'ları.

Örnek kullanım:

from nap.url import Url 
api = Url('http://httpbin.org/') 

response = api.post('post', data={'test': 'Test POST'}) 
print(response.json()) 

fazla örnek: https://github.com/kimmobrunfeldt/nap#examples

Yasal Uyarı: Ben şekerleme yazdım.