使用curl而不使用命令行,但使用php进行post方法

I need to do a http post/curl query from php and store the result in a jsor variable.

In my documentation, it says there are two ways:

  • An HTTP POST request with Content-Type "multipart/form-data" where all parameters are in the post body and the track is in the "track" section of the post "files"
  • An HTTP POST request with Content-Type "application/octet-stream", with the local file as the body of the request, and the parameters in the URL

Example POSTs:

curl -X POST "http://developer.echonest.com/api/v4/track/upload" -d "api_key=xxxxxx&url=http://example.com/audio.mp3"

But how do I implement this in php? I have no clue. From what I have been reading, I don;t think the curl_init method would work, like they describe on the php website, since it is a not a post method:

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);

I would welcome any indication as how to proceed. Thanks.

How about this way?

$post = array(
     "url"=>"path/to/file/example_homepage.txt",
     "api_key"=>"xxxxxx"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "http://developer.echonest.com/api/v4/track/upload");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$response = curl_exec($ch);

There are other options, depending on the situation you might need them, SSL, Cookies, User Agents, etc... Here's a link to the php reference!