Pouya Posted September 1, 2021 Share Posted September 1, 2021 I want to upload an excel file using PHP Curl, so here is my code: <?php //initial request with login data $data = array( "login[password]" => "PASSWORD", "login[email]" => "EMAIL", "form" => "submit" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://websitename.com/login'); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name'); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp'); //could be empty, but cause problems on some hosts $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } $file_url = "test.xlsx"; //here is the file route, in this case is on same directory but you can set URL too like "http://examplewebsite.com/test.txt" $eol = "\r\n"; //default line-break for mime type $BOUNDARY = md5(time()); //random boundaryid, is a separator for each param on my post curl function $BODY=""; //init my curl body $BODY.= '--'.$BOUNDARY. $eol; //start param header $BODY .= 'Content-Disposition: form-data; name="someexcel"' . $eol . $eol; // last Content with 2 $eol, in this case is only 1 content. $BODY .= "Some Data" . $eol;//param data in this case is a simple post data and 1 $eol for the end of the data $BODY.= '--'.$BOUNDARY. $eol; // start 2nd param, $BODY.= 'Content-Disposition: form-data; name="somefile"; filename="test.xlsx"'. $eol ; //first Content data for post file, remember you only put 1 when you are going to add more Contents, and 2 on the last, to close the Content Instance $BODY.= 'Content-Type: application/octet-stream' . $eol; //Same before row $BODY.= 'Content-Transfer-Encoding: base64' . $eol . $eol; // we put the last Content and 2 $eol, $BODY.= chunk_split(base64_encode(file_get_contents($file_url))) . $eol; // we write the Base64 File Content and the $eol to finish the data, $BODY.= '--'.$BOUNDARY .'--' . $eol. $eol; // we close the param and the post width "--" and 2 $eol at the end of our boundary header. curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'X_PARAM_TOKEN : 71e2cb8b-42b7-4bf0-b2e8-53fbd2f578f9' //custom header for my api validation you can get it from $_SERVER["HTTP_X_PARAM_TOKEN"] variable ,"Content-Type: multipart/form-data; boundary=".$BOUNDARY) //setting our mime type for make it work on $_FILE variable ); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/1.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0'); //setting our user agent curl_setopt($ch, CURLOPT_URL, 'https://websitename.com/editinformation/'); curl_setopt($ch, CURLOPT_COOKIEJAR, $BOUNDARY.'.txt'); //saving cookies just in case we want curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // call return content curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); navigate the endpoint curl_setopt($ch, CURLOPT_POST, true); //set as post curl_setopt($ch, CURLOPT_POSTFIELDS, $BODY); // set our $BODY $response = curl_exec($ch); // start curl navigation print_r($response); //print response So basically, I tried logging into that website and then initialize the Excel file and after that tried to upload it into the page editinformation. And the form on editinformation which contains an input type of `file` goes like this: <form class="c-wallet-modal__form c-wallet-modal__small-form" id="wallet-advertising-form"> <label id="import-button"> Upload Excel File <span class="u-hidden" id="mass-import"> <input id="mass-import-input" type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display: none"> </span> </label> </form> Now when I run the page for inserting the test.xlsx Excel file (which already exists in the same directory), it does not properly workout. Because the database of the website must be changed due to Excel file information. So the question is, how to properly upload this Excel file into server using PHP Curl ? What is wrong with my code ? Quote Link to comment https://forums.phpfreaks.com/topic/313647-how-to-upload-an-excel-file-with-php-curl/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.