Using PUT method with PHP cUrl Library

后端 未结 3 2009
温柔的废话
温柔的废话 2020-12-13 04:25

I\'m able to run the following curl command (at the command line) successfully:

curl -XPOST --basic -u user:password -H accept:application/json -H Content-ty         


        
相关标签:
3条回答
  • 2020-12-13 05:02

    Instead of creating a temp file on disk you can use php://temp.

    $body = 'the RAW data string I want to send';
    
    /** use a max of 256KB of RAM before going to disk */
    $fp = fopen('php://temp/maxmemory:256000', 'w');
    
    if (!$fp) 
    {
        die('could not open temp memory data');
    }
    
    fwrite($fp, $body);
    fseek($fp, 0); 
    
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_INFILE, $fp); // file pointer
    curl_setopt($ch, CURLOPT_INFILESIZE, strlen($body));                            
    

    The upside is no disk IO so it should be faster and less load on your server.

    0 讨论(0)
  • 2020-12-13 05:17

    All all that needs to be set is the custom request to reuse post method.

    CURLOPT_URL=>$url,
    CURLOPT_CUSTOMREQUEST=>'PUT',
    CURLOPT_POSTFIELDS=>$params,
    
    0 讨论(0)
  • 2020-12-13 05:23

    Hi all I got it working using this configuration:

    // Start curl
    $ch = curl_init();
    // URL for curl
    $url = "http://localhost/";
    
    // Clean up string
    $putString = stripslashes($query);
    // Put string into a temporary file
    $putData = tmpfile();
    // Write the string to the temporary file
    fwrite($putData, $putString);
    // Move back to the beginning of the file
    fseek($putData, 0);
    
    // Headers
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // Binary transfer i.e. --data-BINARY
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    // Using a PUT method i.e. -XPUT
    curl_setopt($ch, CURLOPT_PUT, true);
    // Instead of POST fields use these settings
    curl_setopt($ch, CURLOPT_INFILE, $putData);
    curl_setopt($ch, CURLOPT_INFILESIZE, strlen($putString));
    
    $output = curl_exec($ch);
    echo $output;
    
    // Close the file
    fclose($putData);
    // Stop curl
    curl_close($ch);
    

    :)

    0 讨论(0)
提交回复
热议问题