My cURL script does not work anymore (so keep in mind it DID work before) on my localhost (so it DOES work on my external host, hence: it might be the server settings):
This script worked fine before on my localhost (it still does on my host). Nothing changed.
REAL PROBLEM: cURL does not set a cookie! What apache modules should be ON for writing cookies (in a .txt file)? I'm running wampserver.
Please note I'm already using:
curl_setopt($curlTable, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curlTable, CURLOPT_COOKIEFILE, 'cookie.txt');
And that php.ini is:
extension=php_curl.dll is uncommented
Other information:
phpinfo()
curl
cURL support enabled
cURL Information 7.21.7
Age 3
Features
AsynchDNS Yes
Debug No
GSS-Negotiate Yes
IDN No
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO No
SSL Yes
SSPI Yes
krb4 No
libz Yes
CharConv No
Protocols dict, file, ftp, ftps, gopher,
http, https, imap, imaps, ldap, pop3,
pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
Host i386-pc-win32
SSL Version OpenSSL/0.9.8r
ZLib Version 1.2.5
libSSH Version libssh2/1.2.7
Currently using:
preg_match('/name="csrf" value="(.*?)"/', $getTokenCurlData, $token);
$postFields = array(
'user' => $userNum,
'paswoord' => $userPass,
'login' => 'loginform',
'csrf' => $token[1]);
// 'user='.$userNum.'&paswoord='.$userPass.'&login=loginform&csrf='.$token[1]
$postData = http_build_query($postFields);
$curlTable = curl_init();
curl_setopt($curlTable, CURLOPT_URL, 'link');
curl_setopt($curlTable, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curlTable, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($curlTable, CURLOPT_ENCODING, 'gzip');
curl_setopt($curlTable, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlTable, CURLOPT_POST, true);
$tableData = curl_exec($curlTable);
if (!$tableData) echo 'post problem?'.$tableData;
if ($tableData == false)
{
echo 'Curl error: ' . curl_error($curlTable);
}
curl_close($curlTable);
// Here I further process my data.
Probably you was banned at the login process. This will give you more info about the problem:
// change
// if (!$siteSource) echo 'Help!';
// to
if ($siteSource === false)
{
echo 'Curl error: ' . curl_error($curl);
}
EDIT: some other opt that you can try (SSL related solved my problems more that one time):
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)');
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
// following is very important
// TRUE to follow any "Location: " header that the server sends
// as part of the HTTP header (note this is recursive, PHP will follow
// as many "Location: " headers that it is sent, unless CURLOPT_MAXREDIRS is set).
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
EDIT 2: Following opt will give you the headers returned (use only to debug). Besides be sure about the cookie.txt is being used properly (locatable and writable).
curl_setopt($curl, CURLOPT_HEADER, true);
That's all I can contribute by my side. Now lo lunch!
EDIT 3: Cookie related stuff:
$cookie_file = PATH_TO_YOUR_COOKIE_FILE . '/cookie.txt';
if (! file_exists($cookie_file) || ! is_writable($cookie_file))
{
echo 'Cookie file missing or not writable.';
exit;
}
// you already added the following, I put it again just to remark their utility
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);
EDIT 4: Always check this at the beginning:
if ( ! extension_loaded('curl'))
{
echo "You need to load/activate the curl extension.";
}
If you receive this error, activate curl in php.ini
uncommenting/removing the front ;
windows:
;extension=php_curl.dll // or curl.dll
linux:
;extension=php_curl.so // or curl.so
and restart the web server. If you do not found this line then you need install curl:
// ubuntu
sudo apt-get install php5-curl
// centos
sudo yum install php5-curl
For windows or your wampserver it must be easy too.