On Mon, Mar 7, 2016 at 3:42 PM, Waitman Gobble <gobble...@gmail.com> wrote:
> > > On Mon, Mar 7, 2016 at 2:56 PM, Ray Satiro via curl-library < > curl-library@cool.haxx.se> wrote: > >> On 3/7/2016 3:10 AM, Waitman Gobble wrote: >> >>> Thanks for the replies, I will read through them and figure it out. I >>> really appreciate it. >>> I didn't post the entire file. >>> >>> One thing I think the problem is in lib/http.c >>> >>> else if(data->set.postfields) >>> expectsend = (curl_off_t)strlen(data->set.postfields); >>> >>> strlen is wrong, the binary data has a character that cuts it off at >>> byte 172, the string is actually much bigger. >>> >>> The documentation states that curl will use strlen if POSTFIELDSIZE is >>> not provided. But it looks like it's using strlen anyway..:( >>> I'm guessing that' why it's sitting there until the end of time? >>> >>> using the form struct doesn't look like it will help. I don't see how >>> to put "already" formatted data into the struct.. Basically I'd have >>> to regurgitate the data and break it into objects and feed back into >>> the form api, which seems not so good. But perhaps I'm mistaken. >>> >> >> The code you're citing in http.c [1] afaict shouldn't be called in your >> case unless a rewind is necessary due to some problem. However if that code >> is called it sets the size to data->state.infilesize: >> >> switch(data->set.httpreq) { >> case HTTPREQ_POST: >> if(data->state.infilesize != -1) >> expectsend = data->state.infilesize; >> else if(data->set.postfields) >> expectsend = (curl_off_t)strlen(data->set.postfields); >> break; >> >> data->state.infilesize should be != -1 because in transfer.c [2] if the >> method is not PUT then data->state.infilesize = data->set.postfieldsize. >> >> Regardless I totally misread what you are doing, it is unusual. I looked >> at your repo [3] and it appears you have a file that basically contains a >> raw multipart post and you want to send that to the server as one without >> libcurl handling the parts. In order to do that you need to set the >> boundary header, so ignore my comment about removing that header it appears >> you are on the right track. >> >> The reason why the file fails to post is you are not sending the correct >> boundary value in the header. multipart boundaries in content are supposed >> to start with two dashes and then the header value, so in other words if >> your boundary value was foo then you'd have a header like "Content-Type: >> multipart/form-data; boundary=foo" and boundaries in the preformatted >> content like: >> >> --foo >> Content-Disposition: form-data; name="bar" >> >> data >> --foo >> Content-Disposition: form-data; name="baz" >> >> data >> --foo-- >> >> So take away the first two dashes and it's foo, or in your case you have >> this in the raw data and the header: >> -----------------------------84927149120355803091994092429 >> but in the header remove two dashes and make it this: >> ---------------------------84927149120355803091994092429 >> >> From RFC 2046 [4]: >> >> The Content-Type field for multipart entities requires one parameter, >> "boundary". The boundary delimiter line is then defined as a line >> consisting entirely of two hyphen characters ("-", decimal value 45) >> followed by the boundary parameter value from the Content-Type header >> field, optional linear whitespace, and a terminating CRLF. >> >> That still doesn't explain why libcurl is waiting on BSD but not on >> Linux. That could be a separate issue. If you discover what that is or have >> a way to reproduce let us know. >> >> Also note for your example to be compatible on Windows it must be opened >> with "rb". >> >> >> [1]: https://github.com/curl/curl/blob/curl-7_47_1/lib/http.c#L411-L416 >> [2]: >> https://github.com/curl/curl/blob/curl-7_47_1/lib/transfer.c#L1340-L1343 >> [3]: http://git.cloudqx.com/root/test-curl >> [4]: https://tools.ietf.org/html/rfc2046#section-5.1.1 >> >> >> ------------------------------------------------------------------- >> List admin: https://cool.haxx.se/list/listinfo/curl-library >> Etiquette: https://curl.haxx.se/mail/etiquette.html >> > > > Thanks for your help! It's good news. I'll try to see why it's hanging on > FreeBSD. > > > > -- > Waitman Gobble > Los Altos California USA > 650 900 8557 > Appears to be a firewall issue. I made a dummy PHP script that opens connection and does simple post without curl. So, it hangs like the curl test. But for some reason only on multipart/form-data posts. Disabling firewall allows multipart post.. so I think there's not a curl issue here. <?php $postdata=file_get_contents('0000000110'); $opts = array( 'http' => array( 'method' => 'POST', 'header' => [ 'Content-Type: multipart/form-data; boundary=---------------------------84927149120355803091994092429', 'Content-Length: '.strlen($postdata) ], 'content' => $postdata ), 'ssl' => array( 'verify_peer' => false, 'ciphers' => 'HIGH:!SSLv2:!SSLv3' ) ); $ctx = stream_context_create($opts); $form = file_get_contents('https://hub.zilla.tech/filepost.php', false, $ctx); echo $form; -- Waitman Gobble Los Altos California USA 6509008557
------------------------------------------------------------------- List admin: https://cool.haxx.se/list/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html