Client URL Library_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3391 | 回复: 0   主题: Client URL Library        下一篇 
    本主题由 Administrator 于 2014-11-13 16:58:30 移动
barry
注册用户
等级:中校
经验:1534
发帖:236
精华:2
注册:2012-1-13
状态:离线
发送短消息息给barry 加好友    发送短消息息给barry 发消息
发表于: IP:您无权察看 2014-11-12 15:15:12 | [全部帖] [楼主帖] 楼主

Client URL Library



简介

北京联动北方科技有限公司


北京联动北方科技有限公司chdb_create

[
edit] Last updated: Fri, 22 Jul 2011
北京联动北方科技有限公司


北京联动北方科技有限公司add a note

User Contributed Notes
cURL
madhouse-network at hotmail dot com
21-Apr-2011 08:51
curl does not seem to work with SSL TLS (FTPES)
It will throw the following error:
(1) Protocol ftpes not supported or disabled in libcurl
frank at interactinet dot com
12-Mar-2011 05:29
I wrote the following to see if a submitted URL has a valid http response code and also if it responds quickly.
Use the code like this:
<?php
$is_ok = http_response($url); // returns true only if http response code < 400
?>
The second argument is optional, and it allows you to check for a specific response code
<?php
http_response($url,'400'); // returns true if http status is 400
?>
The third allows you to specify how long you are willing to wait for a response.
<?php
http_response($url,'200',3); // returns true if the response takes less than 3 seconds and the response code is 200
?>
<?php
function http_response($url, $status = null, $wait = 3)
{
      $time = microtime(true);
      $expire = $time + $wait;
      // we fork the process so we don't have to wait for a timeout
      $pid = pcntl_fork();
      if ($pid == -1) {
            die('could not fork');
      } else if ($pid) {
            // we are the parent
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, TRUE);
            curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
            $head = curl_exec($ch);
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);
            if(!$head)
            {
                  return FALSE;
            }
            if($status === null)
            {
                  if($httpCode < 400)
                  {
                        return TRUE;
                  }
                  else
                  {
                        return FALSE;
                  }
            }
            elseif($status == $httpCode)
            {
                  return TRUE;
            }
            return FALSE;
            pcntl_wait($status); //Protect against Zombie children
      } else {
      // we are the child
      while(microtime(true) < $expire)
      {
            sleep(0.5);
      }
      return FALSE;
}
}
?>
Hope this example helps. It is not 100% tested, so any feedback [sent directly to me by email] is appreciated.
shidec00 at yahoo dot com
19-Jan-2011 10:55
This anomali only happen on windows.
Server indicates that some variables built by http_build_query() is missing.
<?php
//...
//...
//...
$ping_url = $this->sx_url.'ping.php?'.http_build_query($options);
$message = $this->_post_curl($ping_url);
?>
After debugging i found that $ping_url contain url like :
http://example.com/ping.php?app=1&key=mail&ttd=df52861e
But myserver give "No ttd GET variable" response
This problem fixed by adding optional parameter to make sure that
http_build_query() use only '&' as arg separator rather than
'&'
<?php
//...
//...
//...
$ping_url = $this->sx_url.'ping.php?'.http_build_query($options,'','&');
$message = $this->_post_curl($ping_url);
?>
ramez at dot dontspan dot zegenie dot com
28-Oct-2010 04:19
CURL failed with PHP5.3 and Apache2.2.X on my Windows 7 machine.
It turns out that it's not enough to copy the two dll's mentioned
(libeay32 and sslea32) from the php folder into your system32 folder.
You HAVE TO UNBLOCK THESE TWO FILES.
Right click the file, select unblock, for each one. Then restart Apache.
Another very handy security feature added into Windows.
artax_N_O_S_P_A_M_erxes2 at iname dot com
17-Sep-2010 03:59
I needed to use cURL in a php script to download data using not only SSL
for the server authentication but also for client authentication.
On a default install of Fedora, setting up the proper cURL parameters, I would get an error:
$ php curl.php
Peer certificate cannot be authenticated with known CA certificates
The data on http://curl.haxx.se/docs/sslcerts.html
was most useful. Indeed, toward to bottom it tells you to add a missing
link inside /etc/pki/nssdb to use the ca-bundle.crt file. You do it so:
# cd /etc/pki/nssdb
# ln -s /usr/lib64/libnssckbi.so libnssckbi.so
Now you can do client authentication, provided you have your certificate handy with:
<?php
$data = "<soap:Envelope>[...]</soap:Envelope>";
$tuCurl = curl_init();
curl_setopt($tuCurl, CURLOPT_URL, "https://example.com/path/for/soap/url/");
curl_setopt($tuCurl, CURLOPT_PORT , 443);
curl_setopt($tuCurl, CURLOPT_VERBOSE, 0);
curl_setopt($tuCurl, CURLOPT_HEADER, 0);
curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3);
curl_setopt($tuCurl, CURLOPT_SSLCERT, getcwd() . "/client.pem");
curl_setopt($tuCurl, CURLOPT_SSLKEY, getcwd() . "/keyout.pem");
curl_setopt($tuCurl, CURLOPT_CAINFO, getcwd() . "/ca.pem");
curl_setopt($tuCurl, CURLOPT_POST, 1);
curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data);
curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml","SOAPAction: \"/soap/action/query\"", "Content-length: ".strlen($data)));
$tuData = curl_exec($tuCurl);
if(!curl_errno($tuCurl)){
      $info = curl_getinfo($tuCurl);
      echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
} else {
echo 'Curl error: ' . curl_error($tuCurl);
}
curl_close($tuCurl);
echo $tuData;
?>
cliffclof atty gmail dotty com
05-Apr-2010 09:21
A solution that addresses repeat calls to the same set of urls using the
same connection simulating frequent ajax calls in separate browser
tabs.
In a unique situation you may need to set a cookie then use that cookie
for multiple separate persistent connections using the same session
cookie. The problem is the session cookie may change while your doing
your persistent calls. If you set every curl handle to update a shared
cookiejar on close you may overwrite the new found session value with
the old session value depending on the closing order of your handles.
Also, because the cookiejar is only written to on a curl_close, you may
be using dissimilar or old session info in some of your 'faked browser
tabs'.
To solve this problem I created a unique handle that opens and closes
specifically to set a cookie file using CURLOPT_COOKIEJAR. Then I just
use the read-only CURLOPT_COOKIEFILE on the multiple separate persistent
handles.
This solves the problem of shared cookies fighting to write their values
and keep persistent calls using the most up to date cookie information.
Note: In my case the multiple calls were in a while loop and I was using
php in shell. The session cookie value plus browser type limited the
number of connections available and i wanted to use the max connections
per session.
kalyan at kalyanchakravarthy dot net
01-Mar-2010 03:32
When using curl with cookies, Relative path doesn't seem to work.
Use absolute path for setting the variables CURLOPT_COOKIEFILE & CURLOPT_COOKIEJAR.
To make life easier use the realpath("file.txt") function to get the absolute path.
Chris Pollett
19-Jan-2010 02:56
This is something obscure I noticed... If you try to use something like:
<?php
curl_setopt($agent, CURLOPT_POST, true);
curl_setopt($agent, CURLOPT_POSTFIELDS, $post_data);
?>
so that you POST something to a URL. Then if you screwed up your URL slightly like:
http://www.example.com
rather than
http://www.example.com/ (note the slash)
hence, causing a redirect, then your posted data won't be sent once the redirect occurs.
eugene at ultimatecms dot co dot za
07-Dec-2009 11:38
A simple whois/domain availability check using cURL:
<?php
function domain_check($domain) {
      $data = 'http://'.$domain;
      // Create a curl handle to a non-existing location
      $ch = curl_init($data);
      // Execute
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_exec($ch);
      // Check if any error occured
      if(curl_errno($ch))
      {
            return '<span style="color:#22c922">The domain is available!</span>';
      } else {
      return '<span style="color:#c92222">The domain is not available</span>';
}
// Close handle
curl_close($ch);
}
// Usage:
if(isset($_POST['domain'])) {
      echo domain_check($_POST['domain'].$_POST['tld']);
}
?>
<form method="POST" action="">
http:// <input type="text" name="domain">
<select name="tld">
<option value=".com">.com</option>
<option value=".net">.net</option>
<option value=".biz">.biz</option>
</option>
<input type="submit" value="Check">
</form>
artem at zabsoft dot co dot in
11-May-2009 06:43
Hey I modified script for php 5. Also I add support server auth. and fixed some little bugs on the script.
[EDIT BY danbrown AT php DOT net: Original was written by (unlcuky13 AT
gmail DOT com) on 19-APR-09. The following note was included:
Below is the my way of using through PHP 5 objecte oriented encapsulation to make thing easier.]
<?php
class mycurl {
      protected $_useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1';
      protected $_url;
      protected $_followlocation;
      protected $_timeout;
      protected $_maxRedirects;
      protected $_cookieFileLocation = './cookie.txt';
      protected $_post;
      protected $_postFields;
      protected $_referer ="http://www.google.com";
      protected $_session;
      protected $_webpage;
      protected $_includeHeader;
      protected $_noBody;
      protected $_status;
      protected $_binaryTransfer;
      public $authentication = 0;
      public $auth_name = '';
      public $auth_pass = '';
      public function useAuth($use){
            $this->authentication = 0;
            if($use == true) $this->authentication = 1;
      }
      public function setName($name){
            $this->auth_name = $name;
      }
      public function setPass($pass){
            $this->auth_pass = $pass;
      }
      public function __construct($url,$followlocation = true,$timeOut = 30,$maxRedirecs = 4,$binaryTransfer = false,$includeHeader = false,$noBody = false)
      {
            $this->_url = $url;
            $this->_followlocation = $followlocation;
            $this->_timeout = $timeOut;
            $this->_maxRedirects = $maxRedirecs;
            $this->_noBody = $noBody;
            $this->_includeHeader = $includeHeader;
            $this->_binaryTransfer = $binaryTransfer;
            $this->_cookieFileLocation = dirname(__FILE__).'/cookie.txt';
      }
      public function setReferer($referer){
            $this->_referer = $referer;
      }
      public function setCookiFileLocation($path)
      {
            $this->_cookieFileLocation = $path;
      }
      public function setPost ($postFields)
      {
            $this->_post = true;
            $this->_postFields = $postFields;
      }
      public function setUserAgent($userAgent)
      {
            $this->_useragent = $userAgent;
      }
      public function createCurl($url = 'nul')
      {
            if($url != 'nul'){
                  $this->_url = $url;
            }
            $s = curl_init();
            curl_setopt($s,CURLOPT_URL,$this->_url);
            curl_setopt($s,CURLOPT_HTTPHEADER,array('Expect:'));
            curl_setopt($s,CURLOPT_TIMEOUT,$this->_timeout);
            curl_setopt($s,CURLOPT_MAXREDIRS,$this->_maxRedirects);
            curl_setopt($s,CURLOPT_RETURNTRANSFER,true);
            curl_setopt($s,CURLOPT_FOLLOWLOCATION,$this->_followlocation);
            curl_setopt($s,CURLOPT_COOKIEJAR,$this->_cookieFileLocation);
            curl_setopt($s,CURLOPT_COOKIEFILE,$this->_cookieFileLocation);
            if($this->authentication == 1){
                  curl_setopt($s, CURLOPT_USERPWD, $this->auth_name.':'.$this->auth_pass);
            }
            if($this->_post)
            {
                  curl_setopt($s,CURLOPT_POST,true);
                  curl_setopt($s,CURLOPT_POSTFIELDS,$this->_postFields);
            }
            if($this->_includeHeader)
            {
                  curl_setopt($s,CURLOPT_HEADER,true);
            }
            if($this->_noBody)
            {
                  curl_setopt($s,CURLOPT_NOBODY,true);
            }
            /*
            if($this->_binary)
            {
                  curl_setopt($s,CURLOPT_BINARYTRANSFER,true);
            }
            */
            curl_setopt($s,CURLOPT_USERAGENT,$this->_useragent);
            curl_setopt($s,CURLOPT_REFERER,$this->_referer);
            $this->_webpage = curl_exec($s);
            $this->_status = curl_getinfo($s,CURLINFO_HTTP_CODE);
            curl_close($s);
      }
      public function getHttpStatus()
      {
            return $this->_status;
      }
      public function __tostring(){
            return $this->_webpage;
      }
}
?>
[EDIT BY danbrown AT php DOT net: Contains a bugfix supplied by
"roetsch.beni at googlemail (dot) com" on 02-AUG-09, with the following
note: "Fixes the bugfix: 417 bug at lighthttp server."]
admin at jeremyzaretski dot com
18-Mar-2009 04:14
I wanted to create a script that acted as a bridge between an external
server and an internal server, wherein the internal server was not
connected to the internet, but had information required by the users
connecting to the external server. I hatched the idea to use curl to
connect from the external server to the internal server (using request
variables to send queries) and return everything (data and headers)
returned by the file server.
After being driven mad by segmentation faults and crashes because the
curl_exec didn't like me having the CURLOPT_HEADERFUNCTION's function
directly dumping the header:
<?php
function Duplicate_Header($curl, $header)
{
      header($header);
      return strlen($header);
}
?>
... I tried (on a whim) duplicating and trimming the header and passing the duplicate to the header function...
<?php
function Duplicate_Header($curl, $header)
{
      $duplicate = trim($header);
      header($duplicate);
      return strlen($header);
}
?>
Which worked just fine. I don't know if this is just some quirk of PHP4
or my lack of understanding of how the curl and header function works.
web at davss dot com
26-Jan-2009 10:00
Here is a reusable curl object - please help me improve it. There is no erro handling (I don't need it) which can be implemented
<?php
class cURL {
      # defaul global options
      var $opts = array(
      CURLOPT_HEADER => FALSE,
      CURLOPT_RETURNTRANSFER => TRUE
      );
      function cURL(){
      }
      function r($ch,$opt){
            # assign global options array
            $opts = $this->opts;
            # assign user's options
      foreach($opt as $k=>$v){$opts[$k] = $v;}
            curl_setopt_array($ch,$opts);
            curl_exec($ch);
            $r['code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
            $r['cr'] = curl_exec($ch);
            $r['ce'] = curl_errno($ch);
            curl_close($ch);
            return $r;
      }
      function get($url='',$opt=array()){
            # create cURL resource
            $ch = curl_init($url);
            return $this->r($ch,$opt);
      }
      function post($url='',$data=array(),$opt=array()){
            # set POST options
            $opts[CURLOPT_POST] = TRUE;
            $opts[CURLOPT_POSTFIELDS] = $data;
            # create cURL resource
            $ch = curl_init($url);
            return $this->r($ch,$opt);
      }
};
$cURL = new cURL();
#
# END of CLASS
#
/*
* test.php files for testing purposes - must be in the same folder undelss you specify $url path
*
<?php
echo " WORKING!!<p>";
if($_GET > 0){
      print_r($_GET);
}
elseif($_POST > 0){
print_r($_POST);
}
?>
*/
/*
# EXAMPLE OF USE
$path = "http://"; # path to test.php file
$file = "test.php"; # safe the above code in text.php file
$url = $path . $file;
$post_data = array("FLD1"=>"VAL1","FLD2"=>"VAL2");
# user's curl options that override global if necessary
$o = array(CURLOPT_HEADER => TRUE,CURLOPT_RETURNTRANSFER => TRUE,CURLOPT_FAILONERROR=>TRUE);
function ccc($arr){
      echo "CODE: " . $arr['code'] . "<p>";
      echo "CE: " . $arr['ce'] . "<p>";
      echo "CR: <br />" . $arr['cr'] . "<p>";
}
#POST TEST
$cPost = $cURL->post($url,$post_data,$o); // you can remove options
echo "<h2>cPost</h2>";
ccc($cPost);
#GET TEST
$cGet = $cURL->post($url,$post_data,$o); // you can remove options
echo "<h2>cGet</h2>";
ccc($cGet);
*/
?>
pyromus at gmail dot com
16-Oct-2008 11:37
You can use this class for fast entry
<?php
class cURL {
      var $headers;
      var $user_agent;
      var $compression;
      var $cookie_file;
      var $proxy;
      function cURL($cookies=TRUE,$cookie='cookies.txt',$compression='gzip',$proxy='') {
            $this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
            $this->headers[] = 'Connection: Keep-Alive';
            $this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
            $this->user_agent = '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)';
            $this->compression=$compression;
            $this->proxy=$proxy;
            $this->cookies=$cookies;
            if ($this->cookies == TRUE) $this->cookie($cookie);
      }
      function cookie($cookie_file) {
            if (file_exists($cookie_file)) {
                  $this->cookie_file=$cookie_file;
            } else {
            fopen($cookie_file,'w') or $this->error('The cookie file could not be opened. Make sure this directory has the correct permissions');
            $this->cookie_file=$cookie_file;
            fclose($this->cookie_file);
      }
}
function get($url) {
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($process,CURLOPT_ENCODING , $this->compression);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
$return = curl_exec($process);
curl_close($process);
return $return;
}
function post($url,$data) {
      $process = curl_init($url);
      curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
      curl_setopt($process, CURLOPT_HEADER, 1);
      curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
      if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
      if ($this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
      curl_setopt($process, CURLOPT_ENCODING , $this->compression);
      curl_setopt($process, CURLOPT_TIMEOUT, 30);
      if ($this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
      curl_setopt($process, CURLOPT_POSTFIELDS, $data);
      curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
      curl_setopt($process, CURLOPT_POST, 1);
      $return = curl_exec($process);
      curl_close($process);
      return $return;
}
function error($error) {
      echo "<center><div
      style='width:500px;border: 3px solid #FFEEFF; padding: 3px;
      background-color: #FFDDFF;font-family: verdana; font-size:
      10px'><b>cURL Error</b><br>$error</div></center>";
      die;
}
}
$cc = new cURL();
$cc->get('http://www.example.com');
$cc->post('http://www.example.com','foo=bar');
?>
[EDIT BY danbrown AT php DOT net: Includes a bugfix provided by
"Anonymous" on 01-Dec-2008 @ 06:52. Also replaced real URL with
example.com as per RFC 2606.]
[EDIT BY danbrown AT php DOT net: Includes a bugfix provided by (manuel
AT rankone DOT ch) on 24-NOV-09 to properly reference cURL
initialization.]
eflash at gmx dot net
05-Oct-2008 04:45
In order to use curl with secure sites you will need a ca-bundle.crt
file; here's a PHP script I've written which creates a fresh ca-bundle:
http://www.gknw.net/php/phpscripts/mk-ca-bundle.php
I've also written scripts in other languages, f.e. the Perl one which ships now with curl distributions:
http://curl.haxx.se/lxr/source/lib/mk-ca-bundle.pl
and also a Win32 WSH script if you prefer that:
http://www.gknw.net/vb/scripts/mk-ca-bundle.vbs
HTH, Guenter.


--转自 北京联动北方科技有限公司

该贴由system转至本版2014-11-13 16:58:29



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论