Reputation: 4247
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?
Upvotes: 1
Views: 241
Reputation: 287755
The error is obviously in the line
curl_setopt($ch, CURLOPT_PORT, 80); //port to connect to (default 80 obviously)
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.
Upvotes: 3