1

I'm trying to simulate browser with POST method using PHP/cURL. When I looked at that live Http header it shows Content-Type: multipart/form-data.

I checked on the internet where it was suggested that cURL will send multipart/form-data when a custom headers is specified to Content-Type: multipart/form-data.

$headers = array(
    'Content-Type' => 'multipart/form-data; boundary='.$boundary
);

This didn't work for me either when I print_r(curl_getinfo()) it showed

[content_type] => text/html; charset=UTF-8

Which means cURL sent a default headers

I also read that sending/uploading a file with cURL will cause data to be send as multipart/form-data. I created a file which curl uploaded but again when I ran curl_getinfo I got [content_type] => text/html; charset=UTF-8

$data_array = array("field" => "@c:\file_location.txt");

I also tried to read a file content so that the only thing sent would be content NOT ATTACHED FILE but this didn't work for me curl_getinfo shows [content_type] => text/html; charset=UTF-8.

$data_array = array("field" => "<c:\file_location.txt"); // note  @ replaced with <

Do I miss somthing here?

This is the referer

url

    
POST somepath HTTP/1.1
Host: www(dot)domain(dot)com
User-Agent: Mozilla/5.0 (Windows) Gecko/13081217 Firefox/3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: url/some-file.php

Content-Type: multipart/form-data; boundary=--------------------------$boundary
Content-Length: $some_number
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value1"

$some_text1
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value2"

$some_text2
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value3"

$some_text3
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value4"

$some_text4
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value5"

$some_text5
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value6"

$some_text6
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value7"

$some_text7
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value8"

$some_text8
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value9"


----------------------------$boundary
Content-Disposition: form-data; name="$some_Value10"


----------------------------$boundary--

Here is a piece of code.

<?

//Include  files

set_time_limit(0);

include'body.php';
include'keyword.php';
include'bio.php';
include'summary.php';
include'headline.php';
include'category.php';
include'spin.php';
include'random-text.php';


$category = category();
$headline = headline() ;
$summary = summary();
$keyword = keyword();
$body = body();
$bio = bio();

$target="url";
$ref ="url_ref";
$c = "Content-Disposition: form-data; name=";
$boundary = "---------------------------".random_text();

$category = category();
$headline = headline() ;
$summary = summary();
$keyword = keyword();
$body = body();
$bio = bio();

// emulating content form as it appears on livehttp header

$data = "\r\n".$boundary."\r\n".$c."\"pen_id\"\r\n\r\n".$Auth_id."\r\n".$boundary."\r\n".$c."\"cat_id\"\r\n\r\n".category()."\r\n".$boundary."\r\n".$c."\"title\"\r\n\r\n".headline()."\r\n".$boundary."\r\n".$c."\"meta_desc\"\r\n\r\n".summary()."\r\n".$boundary."\r\n".$c."\"meta_keys\"\r\n\r\n".keyword()."\r\n".$boundary."\r\n".$c."\"content\"\r\n\r\n".body()."\r\n".$boundary."\r\n".$c."\"author_bio\"\r\n\r\n".bio()."\r\n".$boundary."\r\n".$c."\"allow_comments\"\r\n\r\ny\r\n".$boundary."\r\n".$c."\"id\"\r\n\r\n\r\n".$boundary."\r\n".$c."\"action\"\r\n\r\n\r\n".$boundary."--\r\n";


// inserting content into a file

$file = "C:\file_path.txt";
$fh = fopen($file, 'w+') or die("Can't open file");
fwrite($fh,$data);
fclose($fh);

// pulling out content from a file as multipart/form-data

 $data_array = array ("field" => "<C:\file_path.txt");

$headers = array (
                    'POST /myhome/article/new HTTP/1.1',
                    'Host: url',
                    'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20 (.NET CLR 3.5.30729)',
                    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8',
                    'Accept-Language: en-us,en;q=0.5',
                    'Accept-Encoding: gzip,deflate',
                    'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
                    'Keep-Alive: 300',
                    'Connection: keep-alive',
                    'Content-Type: multipart/form-data; boundary='.$boundary,
                    'Content-Length: '.strlen($data),

                  );



  # Create the cURL session

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $target);    // Define target site

    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_HEADER, $headers); // No http head
    //curl_setopt($ch, CURLOPT_REFERER, $ref);
    curl_setopt($ch, CURLOPT_NOBODY, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);      // Return page in string
    curl_setopt($ch, CURLOPT_COOKIEJAR, "c:\cookie\cookies.txt");  // Tell cURL where to write
    curl_setopt($ch, CURLOPT_COOKIEFILE, "c:\cookie\cookies.txt"); // Tell cURL which cookies
    //curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "$data_array");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);      // Follow redirects
    curl_setopt($ch, CURLOPT_MAXREDIRS, 4);

   # Execute the PHP/CURL session and echo the downloaded page
   $page = curl_exec($ch);


$err = curl_error($ch);
$info =curl_getinfo($ch);

   # Close the cURL session
    curl_close($ch);

print_r($err);
print_r($info);

?>
3
  • See stackoverflow.com/search?q=post+curl Commented Feb 28, 2010 at 22:01
  • Balus... thanks for the link but I've looked all over the net for days without any success... the links you posted do not solve my problem Commented Feb 28, 2010 at 23:29
  • 1
    I haven't posted any links. You must be confusing me with someone else. Commented Mar 1, 2010 at 0:13

2 Answers 2

3

You've not posted a coherent/consistent stream of code. Is the bit at the end what you expect to happen? Or something else?

You say "it didn't work" - sorry, but we need a lot more information to be able to help you diagnose the problem.

  • Was there an error message?

  • What are you trying to post the file to?

  • Does the receiving URL work with an HTTP form?

  • Can you provide an example of the form it works with?

  • Do you control the code at the receiving end?

  • How do you know it "doesn't work"?

  • Do you get an error message? If so, what?

The operation should be as simple as:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $THE_REMOTE_URL_YOU_ARE_POSTING_TO);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    "field" => "@c:\\file_location.txt", // note the double \\ when used within double quotes
    'a_number' => 12345.
    'a_string' => "hello world"
  )); 
$response = curl_exec($ch);
?>

The bad path might exaplin why curl_getinfo() is not telling you what you expect to see - looking at the actual data exchange might be a lot more helpful. C.

Sign up to request clarification or add additional context in comments.

1 Comment

Was there an error message? ANS : No... What are you trying to post the file to? ANS : article contents ....Does the receiving URL work with an HTTP form? ANS : Yes... Can you provide an example of the form it works with? ANS : Here is a file of that form mediafire.com/?yymrdhdkjo1 .... Do you control the code at the receiving end? ANS : No.... How do you know it "doesn't work"? ANS : When I login to a site I don't see any article posted... Do you get an error message? If so, what? ANS : No.
-1

Try to use exec from PHP to call the COMMAND LINE VERSION OF CURL..

For Uploading a file, this did the trick for me..

Example: A Webform has an input box with name 'Filedata' used for uploading a file to their server And I want to upload myImage.jpg

So on a Linux commandline, (Assuming on in the folder of myImage.jpg)

curl -F "Filedata = @myImage.jpg;" 'http://siteyoursubmittingto.php'

If this works, you can call this from php using something like

exec ("curl -F 'Filedata = @myImage.jpg;' 'http://siteyoursubmittingto.php'");

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.