Curl:
curl -X POST --form "apikey=<API_KEY>" --form "[email protected]" --form
"mode=document_photo" https://api.idolondemand.com/1/api/async/ocrdocument/v1
HTML:
<html>
<head>
<title>Multipart Form Example</title>
</head>
<body>
<form action="https://api.idolondemand.com/1/api/sync/ocrdocument/v1"
method="post" enctype="multipart/form-data">
<p><input type="hidden" name="apikey" value="your-apikey-here"></p>
<p><input type="file" name="file"></p>
<p><button type="submit">Submit</button></p>
</form>
</body>
</html>
Node:
var needle = require('needle');
var data = {
apikey: myapikey,
file: { file: 'myscan.pdf', content_type: 'multipart/form-data' }
}
needle.post('https://api.idolondemand.com/1/api/async/ocrdocument/v1', data, {
multipart: true }, function(err, resp, body) {
console.log(body)
// needle will read the file and include it in the form-data as binary
});
Ruby:
require 'httpclient'
require 'json'
data={file:open("myscan.pdf"), mode:"document_photo", apikey:"apikey"}
clnt = HTTPClient.new
resp=clnt.post(url, data)
body=JSON.parse(resp.body)
Python:
files = {'file': open('myscan.pdf', 'rb')}
data= {'apikey':myapikey,'mode':'document_photo'}
requests.post("https://api.idolondemand.com/1/api/async/ocrdocument/v1",data=data,files=files)
print r.json()
Julia ...how to???
El miércoles, 2 de diciembre de 2015, 19:20:51 (UTC-6), Ismael VC escribió:
>
> Hello everyone!
>
> I've been trying/learning how to wrap HPE Haven OnDemand API
> <https://dev.havenondemand.com/apis> with Julia: HavenOnDemand.jl. but I
> havent figured out how to send multipart data, plus other parameters, it
> seems to me that one can only do one or the other:
>
> "Main `HavenOnDemand` function, used to call **Haven OnDemand** API."
> function call_HOD(
> endpoint :: String,
> async :: Bool, # Some endpoints are `async_only`.
> files :: Vector{FileParam},
> options :: Dict;
> api_url :: String = "https://api.havenondemand.com",
> version :: Int = 1,
> default_version :: Int = 1,
> )
>
> try
> options["apikey"] = _HOD_API_KEY
> catch
> error("Use `HavenOnDemand.set_api_key(api_key::AbstractString)`
> first.")
> end
>
> sync_str = async ? "async" : "sync"
> r = post(
>
> "$(api_url)/$(version)/api/$(sync_str)/$(endpoint)/v$(default_version)",
> files = files, # <--- HERE'S THE PROBLEM!
> data = options
> )
> return r.status == 200 ? json(r) : throw(HODException(r))
> end
>
> "`DataFrame` that holds the `HavenOnDemand` data used wrap the API."
> const _HOD_API = readtable(
> joinpath(Pkg.dir("HavenOnDemand"), "src", "api.data"),
> separator = ' '
> )
>
> # Meta wrap most of the API:
> for row in eachrow(_HOD_API::DataFrame)
> func_name, endpoint, async_only, description = [v for (k, v) in row]
> title = join([ucfirst(s) for s in split(func_name, '_')], ' ')
> docstring = """
> **HPE Haven OnDemand: $(title)**
>
> `$(func_name)([kwargs...])`
>
> $description
>
> All the arguments are optional and they must be supplied as keyword
> arguments, non valid keyword names are ignored.
>
> For information about valid arguments, visit:
>
> * https://dev.havenondemand.com/apis/$(endpoint)
> """
>
> @eval begin
> @doc $docstring ->
> function $(symbol(func_name))(; file = [], kwargs...)
> return call_HOD(
> $endpoint,
> $async_only,
> [FileParam(open(f)) for f in file],
> Dict(kwargs)
> )
> end
> end
> end
>
> The error I get is:
>
> ERROR: Multiple body options specified. Please only specify one
> in do_stream_request at
> C:\Users\Peter\.julia\v0.4\Requests\src\Requests.jl:268
>
> If I try to use both *`file`* and *`data`* in the *`Requests.post`*
> function. I need both because I send the *`apikey`* within the *`data`*
> parameter, if I just use *`file`*, then the *`apikey`* is not passed to
> the API and the request fails
>
> These are some examples of what I'm trying to achieve:
> https://community.havenondemand.com/t5/Wiki/How-to-POST-a-multipart-form-data-Request/ta-p/200
>
> Here are some implementations in other languages:
>
> - Ruby: http://git.io/vRmJb
> - Python: http://git.io/vRmfp
>
> It all boils down to how to do something like this:
>
> julia> post(
> "$(api_url)/$(version)/api/$(sync_str)/$(endpoint)/v$(default_version)",
> files
> = [FileParam("open(text.txt"))], data = Dict("apikey" =>
> ENV["HOD_API_KEY"]))
> ERROR: Multiple body options specified. Please only specify one
> in do_stream_request at
> C:\Users\Peter\.julia\v0.4\Requests\src\Requests.jl:268
>
> Thanks in advance!
>