php教程 curl_setopt與模擬用戶登錄
bool curl_setopt (int ch, string option, mixed value)
curl_setopt()函數(shù)將為一個(gè)curl會(huì)話設(shè)置選項(xiàng),。option參數(shù)是你想要的設(shè)置,,
value是這個(gè)選項(xiàng)給定的值。
//該例子為模擬登錄
$cookie_file = tempnam('./temp','cookie');//保存臨時(shí)cookie
$login_url = 'http://xxx/login.php';//登錄頁(yè)提交地址
$post_fields = 'username=&password=';//傳值參數(shù)
$ch = curl_init($login_url);
curl_setopt($ch, curlopt_header, 0);
curl_setopt($ch, curlopt_returntransfer, 1);
curl_setopt($ch, curlopt_post, 1);
curl_setopt($ch, curlopt_postfields, $post_fields);
curl_setopt($ch, curlopt_cookiejar, $cookie_file);
curl_exec($ch);
curl_close($ch);
下列選項(xiàng)的值將被作為長(zhǎng)整形使用(在option參數(shù)中指定):
curlopt_infilesize: 當(dāng)你上傳一個(gè)文件到遠(yuǎn)程站點(diǎn),,這個(gè)選項(xiàng)告訴php你上傳文
件的大小,。
curlopt_verbose: 如果你想curl報(bào)告每一件意外的事情,設(shè)置這個(gè)選項(xiàng)為一個(gè)非
零值,。
curlopt_header: 如果你想把一個(gè)頭包含在輸出中,,設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值。
curlopt_noprogress: 如果你不會(huì)php為curl傳輸顯示一個(gè)進(jìn)程條,,設(shè)置這個(gè)選項(xiàng)
為一個(gè)非零值,。
注意:php自動(dòng)設(shè)置這個(gè)選項(xiàng)為非零值,你應(yīng)該僅僅為了調(diào)試的目的來(lái)改變這個(gè)選
項(xiàng),。
curlopt_nobody: 如果你不想在輸出中包含body部分,,設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值
,。
curlopt_failonerror: 如果你想讓php在發(fā)生錯(cuò)誤(http代碼返回大于等于300)時(shí)
,不顯示,,設(shè)置這個(gè)選項(xiàng)為一人非零值,。默認(rèn)行為是返回一個(gè)正常頁(yè),忽略代碼,。
curlopt_upload: 如果你想讓php為上傳做準(zhǔn)備,,設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值。
curlopt_post: 如果你想php去做一個(gè)正規(guī)的http post,,設(shè)置這個(gè)選項(xiàng)為一個(gè)非零
值,。這個(gè)post是普通的 application/x-www-from-urlencoded 類型,多數(shù)被html
表單使用,。
curlopt_ftplistonly: 設(shè)置這個(gè)選項(xiàng)為非零值,,php將列出ftp的目錄名列表。
curlopt_ftpappend: 設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值,,php將應(yīng)用遠(yuǎn)程文件代替覆蓋它
,。
curlopt_netrc: 設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值,php將在你的 ~./netrc 文件中查找
你要建立連接的遠(yuǎn)程站點(diǎn)的用戶名及密碼,。
curlopt_followlocation: 設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值(象 'location: ')的頭,,
服務(wù)器會(huì)把它當(dāng)做http頭的一部分發(fā)送(注意這是遞歸的,php將發(fā)送形如
'location: '的頭),。
curlopt_put: 設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值去用http上傳一個(gè)文件,。要上傳這個(gè)文
件必須設(shè)置curlopt_infile和curlopt_infilesize選項(xiàng).
curlopt_mute: 設(shè)置這個(gè)選項(xiàng)為一個(gè)非零值,php對(duì)于curl函數(shù)將完全沉默,。
curlopt_timeout: 設(shè)置一個(gè)長(zhǎng)整形數(shù),,作為最大延續(xù)多少秒。
curlopt_low_speed_limit: 設(shè)置一個(gè)長(zhǎng)整形數(shù),,控制傳送多少字節(jié),。
curlopt_low_speed_time: 設(shè)置一個(gè)長(zhǎng)整形數(shù),控制多少秒傳送
curlopt_low_speed_limit規(guī)定的字節(jié)數(shù),。
curlopt_resume_from: 傳遞一個(gè)包含字節(jié)偏移地址的長(zhǎng)整形參數(shù),,(你想轉(zhuǎn)移到的
開始表單)。
curlopt_sslversion: 傳遞一個(gè)包含ssl版本的長(zhǎng)參數(shù),。默認(rèn)php將被它自己努力的
確定,,在更多的安全中你必須手工設(shè)置。
curlopt_timecondition: 傳遞一個(gè)長(zhǎng)參數(shù),,指定怎么處理curlopt_timevalue參數(shù)
,。你可以設(shè)置這個(gè)參數(shù)為timecond_ifmodsince 或 timecond_isunmodsince。這僅
用于http,。
curlopt_timevalue: 傳遞一個(gè)從1970-1-1開始到現(xiàn)在的秒數(shù),。這個(gè)時(shí)間將被
curlopt_timevalue選項(xiàng)作為指定值使用,或被默認(rèn)timecond_ifmodsince使用,。
下列選項(xiàng)的值將被作為字符串:
curlopt_url: 這是你想用php取回的url地址,。你也可以在用curl_init()函數(shù)初始
化時(shí)設(shè)置這個(gè)選項(xiàng)。
curlopt_userpwd: 傳遞一個(gè)形如[username]:[password]風(fēng)格的字符串,作用php去
連接,。
curlopt_proxyuserpwd: 傳遞一個(gè)形如[username]:[password] 格式的字符串去連
接http代理,。
curlopt_range: 傳遞一個(gè)你想指定的范圍。它應(yīng)該是'x-y'格式,,x或y是被除外的
,。http傳送同樣支持幾個(gè)間隔,用逗句來(lái)分隔(x-y,n-m),。
curlopt_postfields: 傳遞一個(gè)作為http “post”操作的所有數(shù)據(jù)的字符串,。
curlopt_referer: 在http請(qǐng)求中包含一個(gè)'referer'頭的字符串。
curlopt_useragent: 在http請(qǐng)求中包含一個(gè)'user-agent'頭的字符串,。
curlopt_ftpport: 傳遞一個(gè)包含被ftp 'post'指令使用的ip地址,。這個(gè)post指令
告訴遠(yuǎn)程服務(wù)器去連接我們指定的ip地址。 這個(gè)字符串可以是一個(gè)ip地址,,一個(gè)
主機(jī)名,,一個(gè)網(wǎng)絡(luò)界面名(在unix下),或是‘-’(使用系統(tǒng)默認(rèn)ip地址),。
curlopt_cookie: 傳遞一個(gè)包含http cookie的頭連接,。
curlopt_sslcert: 傳遞一個(gè)包含pem格式證書的字符串。
curlopt_sslcertpasswd: 傳遞一個(gè)包含使用curlopt_sslcert證書必需的密碼,。
curlopt_cookiefile: 傳遞一個(gè)包含cookie數(shù)據(jù)的文件的名字的字符串,。這個(gè)
cookie文件可以是netscape格式,或是堆存在文件中的http風(fēng)格的頭,。
curlopt_customrequest: 當(dāng)進(jìn)行http請(qǐng)求時(shí),,傳遞一個(gè)字符被get或head使用。為
進(jìn)行delete或其它操作是有益的,,更pass a string to be used instead of get
or head when doing an http request. this is useful for doing or another,
more obscure, http request.
注意: 在確認(rèn)你的服務(wù)器支持命令先不要去這樣做,。
下列的選項(xiàng)要求一個(gè)文件描述(通過(guò)使用fopen()函數(shù)獲得):
curlopt_file: 這個(gè)文件將是你放置傳送的輸出文件,默認(rèn)是stdout.
curlopt_infile: 這個(gè)文件是你傳送過(guò)來(lái)的輸入文件,。
curlopt_writeheader: 這個(gè)文件寫有你輸出的頭部分,。
curlopt_stderr: 這個(gè)文件寫有錯(cuò)誤而不是stderr。
<?php
function curl_redir_exec($ch,$debug="")
{
static $curl_loops教程 = 0;
static $curl_max_loops = 20;
if ($curl_loops++ >= $curl_max_loops)
{
$curl_loops = 0;
return false;
}
curl_setopt($ch, curlopt_header, true);
curl_setopt($ch, curlopt_returntransfer, true);
$data = curl_exec($ch);
$debbbb = $data;
list($header, $data) = explode("nn", $data, 2);
$http_code = curl_getinfo($ch, curlinfo_http_code);
if ($http_code == 301 || $http_code == 302) {
$matches = array();
preg_match('/location:(.*?)n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
//print_r($url);
if (!$url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch,
curlinfo_effective_url));
/* if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];*/
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path']
. ($url['query']?'?'.$url['query']:'');
curl_setopt($ch, curlopt_url, $new_url);
// debug('redirecting to', $new_url);
return curl_redir_exec($ch);
} else {
$curl_loops=0;
return $debbbb;
}
}
?>