Here are two PHP scripts I just wrote that use
curl_setopt. The first example makes a GET request, and the second example makes a POST request, and passes JSON data to the web service it accesses.
A PHP curl GET request
This first example makes an HTTP GET request and prints the data that is returned by the URL that it hits:
<?php # An HTTP GET request example $url = 'http://localhost:8080/stocks'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); echo $data; ?>
A PHP curl POST request, with JSON data
This next example makes an HTTP POST request. The way this script works is that it sits in the middle of (a) a Sencha ExtJS client and (b) another web service at the URL shown. The Sencha client gives this script the data in a POST format, and this script converts that data to JSON, passes it to the URL shown, and returns whatever information that service returns directly to the Sencha client:
<?php # An HTTP POST request example # a pass-thru script to call my Play server-side code. # currently needed in my dev environment because Apache and Play run on # different ports. (i need to do something like a reverse-proxy from # Apache to Play.) # the POST data we receive from Sencha (which is not JSON) $id = $_POST['id']; $symbol = $_POST['symbol']; $companyName = $_POST['companyName']; # data needs to be POSTed to the Play url as JSON. # (some code from http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl) $data = array("id" => "$id", "symbol" => "$symbol", "companyName" => "$companyName"); $data_string = json_encode($data); $ch = curl_init('http://localhost:8080/stocks/add'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) ); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //execute post $result = curl_exec($ch); //close connection curl_close($ch); echo $result; ?>
I don’t have time to document these examples today, but if you need some PHP
curl examples, including how to set
curl options with
curl_setopt, I hope these examples have been helpful.
Note: I should have used the PHP
decode functions in this example, as I describe in my PHP Base64 encode and decode functions article. I don’t have time to properly update this article right now, but I want to mention this in case you run into the problem shown in the Comments below.
error sending apostrophe symbol if i send a string "We're one"
I'm getting output as "We're one"
You probably need to encode special characters like that on that client side, and then decode it on the server side. There are probably better tutorials on the internet, but I wrote about this in my PHP Base64 encode and decode functions article.
I need to update this article to show that.