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 <b...@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/ExercismTools/ExercismHttpClient.class.st#L95-L107 > > https://github.com/exercism/pharo-smalltalk/blob/4a88c397/dev/src/ExercismTools/ExercismHttpClient.class.st#L213-L218 > > https://github.com/exercism/pharo-smalltalk/blob/9c6b91aaf/dev/src/ExercismSystemTests/ExercismHttpClientTest.class.st#L79-L82 > > https://github.com/exercism/pharo-smalltalk/blob/0e0bd82ed/dev/src/ExercismTools/ZnMimePart.extension.st#L4-L18 > > > 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.