In case that you need to read SSL page content from https with curl, this function can help you:
<?php
function get_web_page( $url,$curl_data )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_POST => 1, // i am sending post data
CURLOPT_POSTFIELDS => $curl_data, // this are my post vars
CURLOPT_SSL_VERIFYHOST => 0, // don't verify ssl
CURLOPT_SSL_VERIFYPEER => false, //
CURLOPT_VERBOSE => 1 //
);
$ch = curl_init($url);
curl_setopt_array($ch,$options);
$content = curl_exec($ch);
$err = curl_errno($ch);
$errmsg = curl_error($ch) ;
$header = curl_getinfo($ch);
curl_close($ch);
// $header['errno'] = $err;
// $header['errmsg'] = $errmsg;
// $header['content'] = $content;
return $header;
}
$curl_data = "var1=60&var2=test";
$url = "https://www.example.com";
$response = get_web_page($url,$curl_data);
print '<pre>';
print_r($response);
?>
curl_setopt_array
(PHP 5 >= 5.1.3)
curl_setopt_array — Belirtilen cURL oturumuna çok sayıda seçenek atar
Açıklama
Belirtilen cURL oturumuna çok sayıda seçenek atar. curl_setopt() işlevini defalarca kullanmak yerine çok sayıda seçeneği bir kerede atamak için yararlıdır.
Değiştirgeler
- ct
-
curl_init() işlevinden dönen bir cURL tanıtıcısı.
- seçenekler
-
Atanacak seçenekleri ve değerlerini içeren dizi. Ahahtarlar geçerli curl_setopt() sabitleri veya bunların sayısal eşdeğerleri olmalıdır.
Dönen Değerler
Belirtilen seçeneklerin tümü atanabilmişe TRUE döner. Bir seçenek başarıyla atanamazsa diğer seçenekler atanmaksızın işlev FALSE ile döner.
Örnekler
Örnek 1 - Yeni bir cURL oturumunun ilklendirilmesi ve bir HTML sayfasının alınması
<?php
// Yeni bir cURL özkaynağı oluşturalım
$ct = curl_init();
// URL'yi ve ilgili seçenekleri belirtelim
$options = array(CURLOPT_URL => 'http://www.example.com/',
CURLOPT_HEADER => false
);
curl_setopt_array($ct, $options);
// URL'yi tarayıcıya aktaralım
curl_exec($ct);
// cURL özkaynağını kapatıp sistem özkaynaklarını serbest bırakalım
curl_close($ct);
?>
PHP 5.1.4 öncesinde bu işlev şöyle taklit edilebilirdi:
Örnek 2 - curl_setopt_array() için kendi gerçeklenimimiz
<?php
if (!function_exists('curl_setopt_array')) {
function curl_setopt_array(&$ch, $curl_options)
{
foreach ($curl_options as $option => $value) {
if (!curl_setopt($ch, $option, $value)) {
return false;
}
}
return true;
}
}
?>
Notlar
Bilginize: curl_setopt() işlevinde olduğu gibi, CURLOPT_POSTFIELDS seçeneğine bir dizinin aktarılması verinin multipart/form-data olarak kodlanmasına, bir URL kodlu dizge atanması ise verinin application/x-www-form-urlencoded olarak kodlanmasına sebep olur.
curl_setopt_array
25-Mar-2009 07:54
01-Dec-2008 07:48
There is no CURLOPT_MAXFILESIZE in the PHP module but it's function only works with Content-Length headers anyway. There are two ways of checking download sizes, one is after the download is complete using filesize(), the other is as the download is running allowing you to terminate before wasting time and disk space.
<?php
$GLOBALS['file_size'] = 0;
$GLOBALS['max_file_size'] = 1024 * 1024;
function on_curl_header($ch, $header)
{
$trimmed = rtrim($header);
if (preg_match('/^Content-Length: (\d+)$/', $trimmed, $matches))
{
$file_size = $matches[1];
if ($file_size > $GLOBALS['max_file_size']) {
// handle error here.
}
}
return strlen($header);
}
function on_curl_write($ch, $data)
{
$bytes = strlen($data);
$GLOBALS['file_size'] += $bytes;
if ($GLOBALS['file_size'] > $GLOBALS['max_file_size']) {
// handle error here.
}
return $bytes;
}
$ch = curl_init();
$options = array(CURLOPT_URL => 'http://www.php.net/',
CURLOPT_HEADER => false,
CURLOPT_HEADERFUNCTION => 'on_curl_header',
CURLOPT_WRITEFUNCTION => 'on_curl_write');
curl_setopt_array($ch, $options);
curl_exec($ch);
// ...
?>
13-Jul-2006 10:58
You can use CURLOPT_HEADERFUNCTION with a callback inside an object. This makes is it easy to capture the headers for later use. For example:
<?php
class Test
{
public $headers;
//...
public function exec($opts)
{
$this->headers = array();
$opts[CURLOPT_HEADERFUNCTION] = array($this, '_setHeader');
$ch = curl_init();
curl_setopt_array($ch, $opts);
return curl_exec($ch);
}
private function _setHeader($ch, $header)
{
$this->headers[] = $header;
return strlen($header);
}
}
$test = new Test();
$opts = array(
//... your curl opts here
);
$data = $test->exec($opts);
print_r($test->headers);
?>
...something like that
(This works in php v. 5.1.4)
