简体   繁体   中英

Curl Equivalent in Python

I have a python program that takes pictures and I am wondering how I would write a program that sends those pictures to a particular URL.

If it matters, I am running this on a Raspberry Pi.

(Please excuse my simplicity, I am very new to all this)

Many folks turn to the requests library for this sort of thing.

For something lower level, you might use urllib2

I've been using the requests package as well. Here's an example POST from the requests documentation.

If you are feeling that you want to use CURL, try PyCurl .
Install it using:

sudo pip install pycurl

Here is an example of how to send data using it:

import pycurl
import json
import urllib
import cStringIO

url = 'your_url'
first_param = '12'
dArrayData = [{'data' : 'first'}, {'data':'second'}]
json_to_send = json.dumps(dArrayData, separators=(',',':'), sort_keys=False)

curlClient = pycurl.Curl()
curlClient.setopt(curlClient.USERAGENT, 'curl-user-agent')

# Sets the url of the service
curlClient.setopt(curlClient.URL, url)

# Sets the request to be of the type POST
curlClient.setopt(curlClient.POST, True)

# Sets the params of the post request
send_params = 'first_param=' + first_param + '&data=' + urllib.quote(json_to_send)
curlClient.setopt(curlClient.POSTFIELDS, send_params)

# Setting the buffer for the response to be written to
bufResponse = cStringIO.StringIO()
curlClient.setopt(curlClient.WRITEFUNCTION, bufResponse.write)

# Setting to fail on error
curlClient.setopt(curlClient.FAILONERROR, True)

# Sets the time out for the connections
curlClient.setopt(pycurl.CONNECTTIMEOUT, 25)
curlClient.setopt(pycurl.TIMEOUT, 25)

response = ''

try:
    # Performs the operation
    curlClient.perform()

except pycurl.error as err:
    errno, errString = err
    print '========'
    print 'ERROR sending the data:'
    print '========'
    print 'CURL error code:', errno
    print 'CURL error Message:', errString
else:
    response = bufResponse.getvalue()
    # Do what ever you want with the response.. Json it or what ever..
finally:
    curlClient.close()
    bufResponse.close()

请求库是最受支持和高级的方法。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM