data-binary parameter in cURL data-binary parameter in cURL curl curl

data-binary parameter in cURL


You need to convert your string to stream first.

You can simply do it with this piece of code.

$YourString = 'data-id=2010-10-01_15-15-53';$stream = fopen('php://memory','r+');fwrite($stream, $YourString );$dataLength = ftell($stream);rewind($stream);

Then having your stream, you can send it using curl.

$curl = curl_init();curl_setopt_array( $curl,        array( CURLOPT_CUSTOMREQUEST => 'PUT'        , CURLOPT_URL => 'https://someurl'        , CURLOPT_HTTPHEADER => array(            'Content-Type: text/plain'        )        , CURLOPT_RETURNTRANSFER => 1                     // means output will be a return value from curl_exec() instead of simply echoed        , CURLOPT_TIMEOUT => 15                           // max seconds to wait        , CURLOPT_FOLLOWLOCATION => 0                     // don't follow any Location headers, use only the CURLOPT_URL, this is for security        , CURLOPT_FAILONERROR => 0                        // do not fail verbosely fi the http_code is an error, this is for security        , CURLOPT_SSL_VERIFYPEER => 1                     // do verify the SSL of CURLOPT_URL, this is for security        , CURLOPT_VERBOSE => 0                            // don't output verbosely to stderr, this is for security        , CURLOPT_INFILE => $stream        , CURLOPT_INFILESIZE => $dataLength        , CURLOPT_UPLOAD => 1        ) );$response = curl_exec($curl);$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);curl_close($curl);echo($response.'<br/>');echo($http_code.'<br/>');

This should work.The lines that help you are highlighted below:

CURLOPT_INFILE => $stream

CURLOPT_INFILESIZE => $dataLength

CURLOPT_UPLOAD => 1


Why do you want pass text plain as binary?

--data-binary "data-id=2010-10-01_15-15-53"

In this line you say that you want transfer plain text, not binary:

curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));

In any case I think your main problem is to use PUT method. (https://stackoverflow.com/a/8054241/333061)

I recommend you to use POST method in this way:

curl_setopt($this->_curl, CURLOPT_HTTPHEADER, array(    'Accept: */*',    'Connection: Keep-Alive',    // this allows you transfer binary data through POST    'Content-type: multipart/form-data'    ));curl_setopt($this->_curl, CURLOPT_POST, 1);curl_setopt($this->_curl, CURLOPT_POSTFIELDS,     http_build_query(array('data-id' => $dataId)));

To easily transfer binary data via curl/php, check this: https://stackoverflow.com/a/3086357/333061