2009-11-05 8 views
3

est ici un peu de code qui est en train de charger un fichier:Alternative à PycURL?

file_size = os.path.getsize('Tea.rdf') 
    f = file('Tea.rdf') 
    c = pycurl.Curl() 
    c.setopt(pycurl.URL, 'http://localhost:8080/openrdf-sesame/repositories/rep/statements') 
    c.setopt(pycurl.HTTPHEADER, ["Content-Type: application/rdf+xml;charset=UTF-8"]) 
    c.setopt(pycurl.PUT, 1) 
    c.setopt(pycurl.INFILE, f) 
    c.setopt(pycurl.INFILESIZE, file_size) 
    c.perform() 
    c.close() 

Maintenant, je ne suis pas aimer cette expérience pycurl du tout. Pouvez-vous suggérer une alternative? Peut-être que urllib2 ou httplib peuvent faire la même chose? Pouvez-vous écrire du code le montrant?

Un grand merci!

+0

Quel est le problème? – gahooa

+0

Le problème est que maintenant j'essaye d'envoyer une requête contre ce magasin ... et curl me donne beaucoup d'ennuis. Donc, je me demande simplement s'il existe une autre façon de faire cela. merci encore – pns

Répondre

1

En utilisant httplib2:

import httplib2 
http = httplib2.Http() 

f = open('Tea.rdf') 
body = f.read() 
url = 'http://localhost:8080/openrdf-sesame/repositories/rep/statements' 
headers = {'Content-type': 'application/rdf+xml;charset=utf-8'} 
resp, content = http.request(url, 'PUT', body=body, headers=headers) 
# resp will contain headers and status, content the response body 
0

votre exemple converti en httplib:

import httplib 

host = 'localhost:8080' 
path = '/openrdf-sesame/repositories/rep/statements' 
path = '/index.html' 
headers = {'Content-type': 'application/rdf+xml;charset=utf-8'} 

f = open('Tea.rdf') 
conn = httplib.HTTPConnection(host) 
conn.request('PUT', path, f, headers) 
res = conn.getresponse() 
print res.status, res.reason 
print res.read() 
4

Oui, pycurl ont une mauvaise conception de l'API, cURL est puissant. Il a plus de futurs, puis urllib/urllib2.

Peut-être que vous voulez essayer d'utiliser human_curl. C'est un wrapper python curl. Vous pouvez l'installer à partir des sources https://github.com/lispython/human_curl ou par pip: pip installer human_curl.

Exemple:

>>> import human_curl as hurl 
>>> r = hurl.put('http://localhost:8080/openrdf-sesame/repositories/rep/statements', 
... headers = {'Content-Type', 'application/rdf+xml;charset=UTF-8'}, 
... files = (('my_file', open('Tea.rdf')),)) 
>>> r 
    <Response: 201> 

vous pouvez également lire les en-têtes de réponse, cookies, etc

+0

human_cur n'est pas encore compatible avec Python 3. – ChaimG