That's a good set of hints. Thanks Sarah King @itamer p: 09 815 8642 m: 0273 711 298 skype: sarah.king
On Wed, Aug 3, 2011 at 11:13 AM, Jochen Daum <[email protected]> wrote: > Hi, > > we just went though a long journey of curl gotchas here and I would > not wish this onto anyone else. Here are some findings that may help > people: > > = Tricky things we learned about curl = > > == CURLOPT_POST before CURLOPT_POSTFIELDS == > > We're not sure if it sometimes causes a problem, but advice is that > CURLOPT_POST should be before CURLOPT_POSTFIELDS. The other way around > may not work. > > curl_setopt($ch, CURLOPT_POST, 1); > curl_setopt($ch, CURLOPT_POSTFIELDS, $postThrough); > > == CURLOPT_HEADERFUNCTION does not support object or class callback in > some version == > > libcurl/7.18.2 on Debian Lenny, PHP 5.2.6 backported only seems to > support functions in global space, whereas 7.19.7, Ubuntu 10.10, 5.3.2 > seems to support both array('class', 'function') (if static keyword > set!) and array($this, 'function'). > > == Sending Files == > > You need to use curl_setopt($ch, CURLOPT_POSTFIELDS, $postThrough); > with $postThrough being an array, otherwise the formtype is not > multipart. > > == Sending arrays in POST == > > To send > > $x = array('value' => array('a' => 1, 'b' => 2)); > > You need to convert the arrays into "square brace strings": > > function arraysToBrackets($array, $prefix = '', $level=0){ > > $resarr = array(); > if (0 && $prefix && $level > 1){ > $prefix = '['.$prefix.']'; > } > foreach ($array as $field => $data){ > if (is_array($data)){ > $resarr = array_merge($resarr, arraysToBrackets($data, > ($prefix?$prefix.'['.$field.']':$field),$level+1)); > }else{ > if ($level > 0){ > $resarr[$prefix.'['.$field.']'] = $data; > }else{ > $resarr[$prefix.$field] = $data; > } > } > } > return $resarr; > } > > > == Passing forward files in arrays == > > When you pass forward files that are in an array, you need to rejig > the format of the file array that comes in, so it matches the format > going out: > > if ($_FILES){ > > foreach ($_FILES as $file => $details){ > if (is_array($details['name'])){ > foreach ($_FILES[$file]['name'] as $file2 => $details2){ > if ($_FILES[$file]['tmp_name'][$file2]){ > $postThrough[$file.'['.$file2.']'] = > > '@'.$_FILES[$file]['tmp_name'][$file2].';filename='.$_FILES[$file]['name'][$file2]; > } > } > }else{ > if ($details['tmp_file']){ > $postThrough[$file] = '@'.$details['tmp_file']; > } > } > } > > == headers passed to CURLOPT_HEADERFUNCTION include the newline at the > end of the header == > > When you process these headers and possibly pass them on to another > site through curl, make sure the newline is removed, otherwise POST > data will not reach the curl'd site > > == debugging proxy == > > To debug issues an easy to use proxy is > [http://portswigger.net/burp/BurpSuite] > > > > > > Kind Regards, > > Jochen Daum > > "There is no shortcut to anywhere worth going" - Beverly Sills > > P.S.: Missed our newsletter? http://eepurl.com/ejRsg > > Automatem Ltd > Phone: 09 630 3425 > Mobile: 021 567 853 > Email: [email protected] > Website: www.automatem.co.nz > http://nz.linkedin.com/in/automatem > http://twitter.com/automatem > > -- > NZ PHP Users Group: http://groups.google.com/group/nzphpug > To post, send email to [email protected] > To unsubscribe, send email to > [email protected] > -- NZ PHP Users Group: http://groups.google.com/group/nzphpug To post, send email to [email protected] To unsubscribe, send email to [email protected]
