2009-11-05 3 views
3

Вот немного кода, который загружает файл:Альтернатива 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() 

Теперь, я не нравится этот опыт PycURL вообще. Можете ли вы предложить любую альтернативу? Может быть, urllib2 или httplib могут сделать то же самое? Можете ли вы написать код, показывающий его?

Огромное спасибо!

+0

В чем проблема? – gahooa

+0

Проблема в том, что теперь я пытаюсь отправить запрос на этот магазин ... и завиток дает мне много неприятностей. Итак, мне просто интересно, есть ли другой способ сделать это. еще раз спасибо – pns

ответ

1

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

ваш пример преобразуется в 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

Да, pycurl имеют плохой дизайн API, локон является мощным. У него больше фьючерсов, затем urllib/urllib2.

Возможно, вы хотите попробовать использовать human_curl. Это оболочка для завитки python. Вы можете установить его из источников https://github.com/lispython/human_curl или по pip: pip install human_curl.

Пример:

>>> 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> 

Также вы можете прочитать заголовки ответа, печенье и т.д.

+0

human_cur еще не согласен с Python 3. – ChaimG