I have this code to login to a server called Pinger TextFree for a bot I’m working on:
<?php
function sendRequest($url, $postorget, $fields = array(), $proxy)
{
$cookie_file = "cookies.txt";
//Initiate connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // set url
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url); // set url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return the transfer
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // allow https
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)'); // random agent
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // automatically follow Location: headers (ie redirects)
curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // auto set the referer in the event of a redirect
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // ibm likes to redirect a lot, make sure we dont get stuck in a loop
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); // file to save cookies in
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // file to read cookies from
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 40); //timeout time for curl
curl_setopt($ch, CURLOPT_PORT, 80); //port to connect to (default 80 obviously)
//Check to see if a proxy is being used
if(isset($proxy)){
//Tell cURL you're using a proxy
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
//Set the proxy
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
//Check if request is POST or GET
if ($postorget == "post" OR $postorget == "POST")
{
curl_setopt($ch, CURLOPT_POST, true); // use POST
if (is_array($fields)){
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields)); // key => name gets turned into &key=name
} else {
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); // &key=name passed in
}
} else {
curl_setopt($ch, CURLOPT_POST, false); // use GET
}
$content = curl_exec($ch); // return html content
$info = curl_getinfo($ch); // return transfer info
$error = curl_error($ch); // return any errors
curl_close($ch);
$request = array('content' => $content,
'error' => $error,
'info' => $info);
return $request;
}
//Login details
$username = "usernamehere";
$password = "passwordhere";
//GET the initial login page
$initFields = "";
$initOutput = sendRequest("http://www.pinger.com/tfw/?t=1360619019053", "GET", $initFields);
echo "<textarea cols='100' rows='400'>";
print_r($initOutput);
echo "</textarea>";
//Login to pinger
$loginFields = "{\"username\":\"".$username."\",\"password\":\"".$password."\",\"clientId\":\"textfree-in-flash-web-free-1360619009-8CA1C5C1-38ED-2E31-3248-CB367450A20F\"}";
$loginOutput = sendRequest("https://api.pinger.com/1.0/web/login", "POST", $loginFields);
echo "<textarea cols='100' rows='400'>";
print_r($loginOutput);
echo "</textarea>";
?>
For some reason every time I try to run this script all I get is “Unknown SSL protocol error in connection to api.pinger.com:80”
What am I doing wrong here? I’ll even specify SSL2 in the setop but it just hangs forever – I just can’t get this to work!
Here is the app I’m trying to automate: http://www.pinger.com/tfw/
It’s in flash but I’m using Fiddler to sniff the HTTP/HTTPS requests to automate them with cURL.
Any ideas from you guys?
The error is obviously in the line
HTTPS servers listen on port 443 by default. Simply deleting this line should be sufficient; curl will then figure out the port from the protocol in the URL.