pycurl эквивалент curl --data-binary

Я хотел бы знать эквивалент этой команды curl в pycurl:

curl --data-binary @binary_data_file.bin 'http://server/myapp/method'

Примечание. В приведенном выше операторе curl используется метод POST. Мне нужно использовать это для совместимости с моим серверным скриптом.


person ChrisGuest    schedule 12.07.2012    source источник


Ответы (2)


Библиотека requests предназначена для того, чтобы такие вещи были простыми:

import requests
r = requests.post('http://server/myapp/method', data={'aaa': 'bbb'})

Или в зависимости от того, как принимающая сторона ожидает данные:

import requests
r = requests.post('http://server/myapp/method',
    data=file('binary_data_file.bin','rb').read())
person Jon Clements♦    schedule 12.07.2012
comment
Спасибо, Джон, тот факт, что вы предложили альтернативный модуль для pycurl, который позволит использовать такие питонические однострочники, дает лучший ответ, чем реальная реализация pycurl. - person ChrisGuest; 12.07.2012

Из libcurl setopt(...) попробуйте этот вариант:

CURLOPT_POSTFIELDSIZE

Если вы хотите отправлять данные на сервер, не позволяя libcurl выполнять функцию strlen() для измерения размера данных, необходимо использовать этот параметр. При использовании этой опции вы можете публиковать полностью двоичные данные, что в противном случае может привести к сбою. Если для этого размера задано значение -1, библиотека будет использовать функцию strlen() для получения размера.

http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPOSTFIELDSIZE

person Community    schedule 31.10.2013