Hi Ben, Try: ZnClient new systemPolicy; beOneShot; url: 'http://dpaste.com/api/v2/'; addPart: (ZnMimePart fieldName: 'syntax' value: 'smalltalk'); addPart: (ZnMimePart fieldName: 'content' value: 'hello; world'); post. Although curl is powerful, well known and well supported, I would not say it is a great standard for interface design, it is way too complex. Zn tries to approach HTTP from an object design standpoint. You pass along a ZnMultiPartFormDataEntity object that contains ZnMimeParts as entity to your POST request. Sven
On 17 May 2019, at 05:26, Ben Coman <btc@openinworld.com> wrote:
We are trying to replicate the following in Pharo... $ echo "hello; world" | curl -s -F "syntax=smalltalk" -F "content=<-" http://dpaste.com/api/v2/
like this... url := ZnClient new logToTranscript; systemPolicy; beOneShot; url: 'http://dpaste.com/api/v2/'; formAt: 'syntax' put: 'smalltalk'; formAt: 'content' put: 'hello; world'; post.
Curl produces... "hello; world" http://dpaste.com/2Y15WGY but Zinc produces only... "hello" http://dpaste.com/28E974Y
The difference is apparent on the wire... With curl... <image.png>
With Zinc... <image.png>
The curl manpage says... -F, --form <name=content> For HTTP protocol family, this lets curl emulate a filled-in form in which a user has pressed the submit button. This causes curl to POST data using the Content-Type multipart/form-data according to RFC 2388.
So we've used multipart forms elsewhere already... https://github.com/exercism/pharo-smalltalk/blob/4a88c397/dev/src/ExercismTo... https://github.com/exercism/pharo-smalltalk/blob/4a88c397/dev/src/ExercismTo... https://github.com/exercism/pharo-smalltalk/blob/9c6b91aaf/dev/src/ExercismS... https://github.com/exercism/pharo-smalltalk/blob/0e0bd82ed/dev/src/ExercismT...
so I'm sure we can achieve what we want, just curious if there might be any convenience methods that could be used similar to the examples given on the rest of curl's "-F" description. Or if there could be? Curl examples are often used for reference by APIs (http://dpaste.com/api/v2/) and a close map between curl and Zinc would be really great.
cheers -ben
P.S. I even wonder if a ZnCurl would be useful that parsed curl strings. This would firstly provide ease of use for newcomers, and secondly define how to map through to native Zinc methods.