PHP Curl post with file attachment; custom content-type header

前端 未结 1 896
醉梦人生
醉梦人生 2020-12-29 15:05

I have to post a file to a server along side with a few post params. The documentation I received from this server admin shows an example of what the post request is suppose

相关标签:
1条回答
  • 2020-12-29 15:58

    When you tell cURL to upload a file, the Content-Type header is automatically set to multipart/form-data. For a request like in your documentation, you would have to upload the file manually.

    <?php
    $url     = 'https://hostserver.com/gateway/remote_send';
    $payload = array(
        'profile_name'  => 'username',
        'profile_pw'    => 'password1234',
        'attached_type' => 'action_1'
    );
    $file = realpath('/home/username/tests/test1234qwerty.csv');
    
    // build multipart
    $payload = http_build_query($payload);
    $params  = "--ABC1234\r\n"
        . "Content-Type: application/x-www-form-urlencoded\r\n"
        . "\r\n"
        . $payload . "\r\n"
        . "--ABC1234\r\n"
        . "Content-Type: text/csv\r\n"
        . "Content-Disposition: attachment; filename=\"attachment.csv\"\r\n"
        . "\r\n"
        . file_get_contents($file) . "\r\n"
        . "--ABC1234--";
    
    $first_newline      = strpos($params, "\r\n");
    $multipart_boundary = substr($params, 2, $first_newline - 2);
    $request_headers    = array();
    $request_headers[]  = 'Content-Length: ' . strlen($params);
    $request_headers[]  = 'Content-Type: multipart/x-api-remote-integration; boundary='
        . $multipart_boundary;
    
    // send the request now
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
    
    $reply = curl_exec($ch);
    

    Does that work?

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