GregFenton Posted May 24, 2006 Share Posted May 24, 2006 Here's a little background to my problem..I have a cable modem that has a habit of dying on me, normally either overnight or whenever I leave the house (such as right now).I know the modem has a HTTP-based configuration page, and I know it uses the POST method to send the reboot command.What I wish to do is write a simple script that pings a web site (eg yahoo) every 5 minutes, and if the web site cannot be found do a HTTP POST to the cable modem with the reboot command.How can I send a HTTP POST in PHP?Please understand that I don't mean "How can I have a web page process HTTP POST in php?"Hope someone out there can help..GregI have looked and found how to do the same thing via telnet, however Windows XP's telnet command does not let you pipe input to it:How do we pass content to the HTTP server via standard input? Here's how to do it with telnet (If you don't use the same fname and lname values shown here, remember to adjust the Content-Length figure so that the posttest.cgi script knows how much to read in from the standard input):[code]POST /xml/crud/posttest.cgi HTTP/1.1Host: snee.comContent-Length: 21fname=Barry&lname=Wom[/code]The above is an example of what I would need to send. Quote Link to comment https://forums.phpfreaks.com/topic/10365-http-post-method-help-required/ Share on other sites More sharing options...
GregFenton Posted May 25, 2006 Author Share Posted May 25, 2006 Bump. Quote Link to comment https://forums.phpfreaks.com/topic/10365-http-post-method-help-required/#findComment-38818 Share on other sites More sharing options...
wisewood Posted May 25, 2006 Share Posted May 25, 2006 This script will send a request to yahoo.com every 5 minutes. If the connection is ok, it will display the time taken to respond, otherwise it will echo a form, with a hidden value & an image.If you set the action of the form to the desired location to send the reboot command, and set the hidden field with the required settings, you will be able to perform the command required.The image that is included is there only as a means to submit the data. The image includes an onLoad command to submit the form when the image is loaded.Hope this helps you out.At the moment the page submits the data to itself and has an if statement in place to display a message if the data has been submitted... this can be removed once you get your head around it.[code]<?php session_start(); // Reload the page every 300 seconds (5 minutes)echo "<META HTTP-EQUIV=Refresh CONTENT='300; URL=$PHP_SELF'>";if($_POST[reboot]=="rebootModemNow"){ echo "Connection lost, rebooting modem";}else{ // Checksum calculation function function icmpChecksum($data) { if (strlen($data)%2) $data .= "\x00"; $bit = unpack('n*', $data); $sum = array_sum($bit); while ($sum >> 16) $sum = ($sum >> 16) + ($sum & 0xffff); return pack('n*', ~$sum); } // Making the package $type= "\x08"; $code= "\x00"; $checksum= "\x00\x00"; $identifier = "\x00\x00"; $seqNumber = "\x00\x00"; $data= "Scarface"; $package = $type.$code.$checksum.$identifier.$seqNumber.$data; $checksum = icmpChecksum($package); // Calculate the checksum $package = $type.$code.$checksum.$identifier.$seqNumber.$data; // And off to the sockets $socket = socket_create(AF_INET, SOCK_RAW, 1); if(!@socket_connect($socket, "http://www.yahoo.com", null)) { echo " <form method=post name=rebootCableModemForm action=$PHP_SELF?action=reboot> <input type=hidden value=rebootModemNow name=reboot> </form> <img src=../apache_pb.gif onLoad='document.rebootCableModemForm.submit();'> ";} // If you're using below PHP 5, see the manual for the microtime_float // function. Instead of just using the m // icrotime() function. $startTime = microtime(true); @socket_send($socket, $package, strLen($package), 0); if (@socket_read($socket, 255)) { echo round(microtime(true) - $startTime, 4) .' seconds'; } socket_close($socket);} ?>[/code] Quote Link to comment https://forums.phpfreaks.com/topic/10365-http-post-method-help-required/#findComment-38853 Share on other sites More sharing options...
GregFenton Posted May 25, 2006 Author Share Posted May 25, 2006 Thanks, I follow it fine, I'll convert it to what I need :) Quote Link to comment https://forums.phpfreaks.com/topic/10365-http-post-method-help-required/#findComment-39007 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.