I am trying to post an image with cURL in PHP using multipart/form-data header since API that I am sending to is expecting image to be sent as multi-part form.
I don't have problems talking to the API with other requests; only posting an image is an issue.
I am using this form on client side:
<form action="http://myServerURL" method="POST" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="Submit"> </form>
and this is the server I am posting to (here I am trying to post this data forward to an API):
$ch = curl_init($url); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, $imgRawData); // <-- raw data here hm? curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookieJar); curl_setopt( $ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, 1); <-- using this as I wanted to check if HTTPHEADER is set curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data')); <-- setting content-type header? curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1); // i get response from the server $response = curl_exec( $ch ); // with this I can check what kind of content type the last request had? $requestContentType = curl_getinfo($ch,CURLINFO_CONTENT_TYPE); echo "<br>request Content Type was:".$requestContentType."<br>"; curl_close($ch); echo "<br><b>SERVER POST IMAGE RESPONSE:</b><br>"; echo $response;
With the code below I am able to see my request headers:
curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, true); var_dump(curl_getinfo($ch));
The content-type in request-headers is shown correctly now. But it seems the image is not send correctly as API would expect. Unfortunately I don't have access to the API...
Any help appreciated, thank you
In case anyone had the same problem: check this as @PravinS suggested. I used the exact same code as shown there and it worked for me perfectly.
This is the relevant part of the server code that helped:
html form should look something like: