15

Is there a way to send POST data without using a web form? I am working with a 3rd party payment processor and I have an option to manually submit payment but the data is required to be POST formatted.

I plan to run my script as CRON job and so as it is automated there is no user input via a web form submission.

Thank in advance.

Alan A
  • 2,301
  • 6
  • 26
  • 46

2 Answers2

22

try CURL

http://php.net/manual/en/book.curl.php

//set POST variables
$url = 'http://domain.com/get-post.php';
$fields = array(
                        'lname' => urlencode($last_name),
                        'fname' => urlencode($first_name),
                        'title' => urlencode($title),
                        'company' => urlencode($institution),
                        'age' => urlencode($age),
                        'email' => urlencode($email),
                        'phone' => urlencode($phone)
                );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);
VancleiP
  • 657
  • 4
  • 7
  • 5
    That's a mighty fine [example](http://davidwalsh.name/curl-post) you lifted there. – Andy Oct 18 '13 at 16:41
  • Hi @Andy, I could adapt the answer according with his needs, but because he didn't provide any, I guess a good example is welcome ;-) – VancleiP Oct 18 '13 at 16:44
  • @VanckeiP What about CURLOPT_POST, you added "count($fields)" - so this is supposed to provide the number of fields? Most examples I've seen only adds a "1"..it's hard to find info on this. – Galivan Oct 28 '15 at 09:22
  • 4
    Much easier to urlencode the whole data array at once with **http_build_query($fields)** than using a loop: https://secure.php.net/manual/en/function.http-build-query.php – Luis Martin Apr 05 '16 at 21:43
  • Does this line actually do anything? rtrim($fields_string, '&'); Should it be: $fields_string = rtrim($fields_string, '&'); – mnutsch Apr 07 '17 at 16:08
  • @mnutsch it would trim off the last '&' on the end of the string. Also note that rtrim doesn't return anything. https://www.w3schools.com/php/func_string_rtrim.asp – Radmation Apr 20 '17 at 20:27
1

You can use the cURL extension, or even file_get_contents() with a custom context.

Alix Axel
  • 141,486
  • 84
  • 375
  • 483