php curl 源码,curl类源码

[php]代码库/*使用方法*/

$ch = new Curl_Class();

$ch->set_action("login", $loginurl, $refer);

$postdata = array("username"=>"fortest", "password"=>"12345");

$ch->open()->get_cookie($this->_cookie)->get("login", $postdata);

$result = $ch->header() . $ch->body();

$ch->close();

//curl类源码

class Curl_Class

{

private $_is_temp_cookie = false;

private $_header;

private $_body;

private $_ch;

private $_proxy;

private $_proxy_port;

private $_proxy_type = 'HTTP'; // or SOCKS5

private $_proxy_auth = 'BASIC'; // or NTLM

private $_proxy_user;

private $_proxy_pass;

protected $_cookie;

protected $_options;

protected $_url = array ();

protected $_referer = array ();

public function __construct($options = array()) {

$defaults = array ();

$defaults ['timeout'] = 30;

$defaults ['temp_root'] = sys_get_temp_dir ();

$defaults ['user_agent'] = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20';

$this->_options = array_merge ( $defaults, $options );

}

public function open() {

$this->_ch = curl_init ();

//curl_setopt ( $this->_ch, CURLOPT_FOLLOWLOCATION, true );

curl_setopt ( $this->_ch, CURLOPT_HEADER, true );

curl_setopt ( $this->_ch, CURLOPT_RETURNTRANSFER, true );

curl_setopt ( $this->_ch, CURLOPT_USERAGENT, $this->_options ['user_agent'] );

curl_setopt ( $this->_ch, CURLOPT_CONNECTTIMEOUT, $this->_options ['timeout'] );

curl_setopt ( $this->_ch, CURLOPT_HTTPHEADER, array('Expect:') ); // for lighttpd 417 Expectation Failed

$this->_header = '';

$this->_body = '';

return $this;

}

public function close() {

if (is_resource ( $this->_ch )) {

curl_close ( $this->_ch );

}

if (isset ( $this->_cookie ) && $this->_is_temp_cookie && is_file ( $this->_cookie )) {

unlink ( $this->_cookie );

}

}

public function cookie() {

if (! isset ( $this->_cookie )) {

if (! empty ( $this->_cookie ) && $this->_is_temp_cookie && is_file ( $this->_cookie )) {

unlink ( $this->_cookie );

}

$this->_cookie = tempnam ( $this->_options ['temp_root'], 'curl_manager_cookie_' );

$this->_is_temp_cookie = true;

}

curl_setopt ( $this->_ch, CURLOPT_COOKIEJAR, $this->_cookie );

curl_setopt ( $this->_ch, CURLOPT_COOKIEFILE, $this->_cookie );

return $this;

}

public function get_cookie($cookfile) {

curl_setopt ( $this->_ch, CURLOPT_RETURNTRANSFER, true );

curl_setopt ( $this->_ch, CURLOPT_COOKIEJAR, $cookfile );

return $this;

}

public function set_cookie($cookfile) {

curl_setopt ( $this->_ch, CURLOPT_RETURNTRANSFER, true );

curl_setopt ( $this->_ch, CURLOPT_COOKIEFILE, $cookfile );

return $this;

}

public function set_session($session) {

curl_setopt ( $this->_ch, CURLOPT_COOKIESESSION, $session );

return $this;

}

public function ssl() {

curl_setopt ( $this->_ch, CURLOPT_SSL_VERIFYPEER, false );

return $this;

}

public function proxy($host = null, $port = null, $type = null, $user = null, $pass = null, $auth = null) {

$this->_proxy = isset ( $host ) ? $host : $this->_proxy;

$this->_proxy_port = isset ( $port ) ? $port : $this->_proxy_port;

$this->_proxy_type = isset ( $type ) ? $type : $this->_proxy_type;

$this->_proxy_auth = isset ( $auth ) ? $auth : $this->_proxy_auth;

$this->_proxy_user = isset ( $user ) ? $user : $this->_proxy_user;

$this->_proxy_pass = isset ( $pass ) ? $pass : $this->_proxy_pass;

if (! empty ( $this->_proxy )) {

curl_setopt ( $this->_ch, CURLOPT_PROXYTYPE, $this->_proxy_type == 'HTTP' ? CURLPROXY_HTTP : CURLPROXY_SOCKS5 );

curl_setopt ( $this->_ch, CURLOPT_PROXY, $this->_proxy );

curl_setopt ( $this->_ch, CURLOPT_PROXYPORT, $this->_proxy_port );

}

if (! empty ( $this->_proxy_user )) {

curl_setopt ( $this->_ch, CURLOPT_PROXYAUTH, $this->_proxy_auth == 'BASIC' ? CURLAUTH_BASIC : CURLAUTH_NTLM );

curl_setopt ( $this->_ch, CURLOPT_PROXYUSERPWD, "[{$this->_proxy_user}]:[{$this->_proxy_pass}]" );

}

return $this;

}

public function post($action, $query = array()) {

if (is_array($query)) {

foreach ($query as $key => $val) {

if (!empty ($val) && $val{0} != '@') {

$encode_key = urlencode($key);

if ($encode_key != $key) {

unset($query[$key]);

}

//$query[$encode_key] = urlencode($val);

$query[$encode_key] = $val;

}

}

}

curl_setopt ( $this->_ch, CURLOPT_POST, true );

curl_setopt ( $this->_ch, CURLOPT_URL, $this->_url [$action] );

curl_setopt ( $this->_ch, CURLOPT_REFERER, $this->_referer [$action] );

curl_setopt ( $this->_ch, CURLOPT_POSTFIELDS, $query );

$this->_requrest ();

return $this;

}

public function get($action, $query = array()) {

$url = $this->_url [$action];

if (! empty ( $query )) {

$url .= strpos ( $url, '?' ) === false ? '?' : '&';

$url .= is_array ( $query ) ? http_build_query ( $query ) : $query;

}

curl_setopt ( $this->_ch, CURLOPT_URL, $url );

curl_setopt ( $this->_ch, CURLOPT_REFERER, $this->_referer [$action] );

$this->_requrest();

return $this;

}

public function getinfo() {

return curl_getinfo($this->_ch);

}

public function output_trace($output) {

curl_setopt ( $this->_ch, CURLOPT_VERBOSE,1 );

curl_setopt ( $this->_ch, CURLOPT_STDERR,$output );

return $this;

}

public function download($action, $query = array(), $saveto, $rewritemode=0) {

$url = $this->_url [$action];

if (! empty ( $query )) {

$url .= strpos ( $url, '?' ) === false ? '?' : '&';

$url .= is_array ( $query ) ? http_build_query ( $query ) : $query;

}

try

{

if ($rewritemode==1 || !file_exists($saveto))

{

$fp = @fopen($saveto, "wb");

@curl_setopt ($this->_ch, CURLOPT_FILE, $fp);

curl_setopt ($this->_ch, CURLOPT_URL, $url );

curl_setopt ($this->_ch, CURLOPT_HEADER,0);

curl_setopt ( $this->_ch, CURLOPT_REFERER, $this->_referer [$action] );

curl_exec ( $this->_ch );

curl_close($this->_ch);

@fclose($fp);

}

return true;

}

catch (exception $e)

{

return false;

}

}

public function put($action, $query = array()) {

curl_setopt ( $this->_ch, CURLOPT_CUSTOMREQUEST, 'PUT' );

return $this->post( $action, $query );

}

public function delete($action, $query = array()) {

curl_setopt ( $this->_ch, CURLOPT_CUSTOMREQUEST, 'DELETE' );

return $this->post( $action, $query );

}

public function head($action, $query = array()) {

curl_setopt ( $this->_ch, CURLOPT_CUSTOMREQUEST, 'HEAD' );

return $this->post( $action, $query );

}

public function options($action, $query = array()) {

curl_setopt ( $this->_ch, CURLOPT_CUSTOMREQUEST, 'OPTIONS' );

return $this->post( $action, $query );

}

public function trace($action, $query = array()) {

curl_setopt ( $this->_ch, CURLOPT_CUSTOMREQUEST, 'TRACE' );

return $this->post( $action, $query );

}

public function connect() {

}

public function follow_location() {

preg_match ( '#Location:\s*(.+)#i', $this->header (), $match );

if (isset ( $match [1] )) {

$this->set_action( 'auto_location_gateway', $match [1], $this->effective_url () );

$this->get( 'auto_location_gateway' )->follow_location ();

}

return $this;

}

public function set_action($action, $url, $referer = '') {

$this->_url [$action] = $url;

$this->_referer [$action] = $referer;

return $this;

}

public function header() {

return $this->_header;

}

public function body() {

return $this->_body;

}

public function effective_url() {

return curl_getinfo ( $this->_ch, CURLINFO_EFFECTIVE_URL );

}

public function http_code() {

return curl_getinfo($this->_ch, CURLINFO_HTTP_CODE);

}

private function _requrest() {

$response = curl_exec ( $this->_ch );

$errno = curl_errno ( $this->_ch );

if ($errno > 0) {

throw new Curl_Manager_Exception ( curl_error ( $this->_ch ), $errno );

}

$header_size = curl_getinfo ( $this->_ch, CURLINFO_HEADER_SIZE );

$this->_header = substr ( $response, 0, $header_size );

$this->_body = substr ( $response, $header_size );

}

public function __destruct() {

$this->close ();

}

}

694748ed64b9390909c0d88230893790.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值