Netscape HTTP Cooke File Parser In PHP
http://www.hashbangcode.com/blog/netscape-http-cooke-file-parser-php
I recently needed to create a function that would read and extract cookies from a Netscape HTTP cookie file. This file is generated by PHP when it runs CURL (with the appropriate options enabled) and can be used in subsequent CURL calls. This file can be read to see what cookies where created after CURL has finished running. As an example, this is the sort of file that might be created during a typical CURL call.
# Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. www.example.com FALSE / FALSE cookiename value
The first few lines are comments and can therefore be ignored. The cookie data consists of the following items (in the order they appear in the file.
- domain - The domain that created and that can read the variable.
- flag - A TRUE/FALSE value indicating if all machines within a given domain can access the variable. This value is set automatically by the browser, depending on the value you set for domain.
- path - The path within the domain that the variable is valid for.
- secure - A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable.
- expiration - The UNIX time that the variable will expire on.
- name - The name of the variable.
- value - The value of the variable.
So the function used to extract this information would look like this. It works in a pretty straightforward way and essentially returns an array of cookies found, if any. I originally tried to use a hash character to determine the start of a commented line and then try to extract anything else that had content. It turns out, however, that some sites will add cookies with a hash character at the start (yes, even for the URL parameter). So it is safer to detect for a cookie line by seeing if there are 6 tab characters in it. This is then exploded by the tab character and converted into an array of data items.
/**
* Extract any cookies found from the cookie file. This function expects to get
* a string containing the contents of the cookie file which it will then
* attempt to extract and return any cookies found within.
*
* @param string $string The contents of the cookie file.
*
* @return array The array of cookies as extracted from the string.
*
*/
function extractCookies($string) {
$cookies = array();
$lines = explode("\n", $string);
// iterate over lines
foreach ($lines as $line) {
// we only care for valid cookie def lines
if (isset($line[0]) && substr_count($line, "\t") == 6) {
// get tokens in an array
$tokens = explode("\t", $line);
// trim the tokens
$tokens = array_map('trim', $tokens);
$cookie = array();
// Extract the data
$cookie['domain'] = $tokens[0];
$cookie['flag'] = $tokens[1];
$cookie['path'] = $tokens[2];
$cookie['secure'] = $tokens[3];
// Convert date to a readable format
$cookie['expiration'] = date('Y-m-d h:i:s', $tokens[4]);
$cookie['name'] = $tokens[5];
$cookie['value'] = $tokens[6];
// Record the cookie.
$cookies[] = $cookie;
}
}
return $cookies;
}
To test this function I used the following code. This takes a URL (google.com in this case) and sets up the options for CURL so that when the page is downloaded it also creates a cookie file. This file is then analyzed using the above function to see what cookies are present therein.
// Url to extract cookies from
$url = 'http://www.google.com/';
// Create a cookiefar file
$cookiefile = tempnam("/tmp", "CURLCOOKIE");
// create a new cURL resource
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Set user agent
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090910 Ubuntu/9.04 (jaunty) Shiretoko/3.5.3");
// set URL and other appropriate options
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile);
$data = curl_exec($curl);
// close cURL resource, and free up system resources
curl_close($curl);
// Extract and store any cookies found
print_r(extractCookies(file_get_contents($cookiefile)));
When run, this function produces the following output.
Array
(
[0] => Array
(
[domain] => .google.com
[flag] => TRUE
[path] => /
[secure] => FALSE
[expiration] => 2013-06-29 10:00:01
[name] => PREF
[value] => ID=051f529ee8937fc5:FF=0:TM=1309424401:LM=1309424401:S=4rhYyPL_bW9KxVHI
)
)
Netscape HTTP Cooke File Parser In PHP的更多相关文章
- minIni: A minimal INI file parser
https://www.compuphase.com/minini.htm https://github.com/compuphase/minIni
- VBA json parser[z]
http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html VB-JSON: A Visual Basic 6 (VB ...
- Lexer and parser generators (ocamllex, ocamlyacc)
Chapter 12 Lexer and parser generators (ocamllex, ocamlyacc) This chapter describes two program gene ...
- qLibc 对于C C++都是一个很好的框架,提供Tree Hash Stack String I/O File Time等功能
qLibc Copyright qLibc is published under 2-clause BSD license known as Simplified BSD License. Pleas ...
- Python中的option Parser
一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse, ...
- java面试题总汇
coreJava部分 7 1.面向对象的特征有哪些方面? 7 2.作用域public,private,protected,以及不写时的区别? 7 3.String 是最基本的数据类型吗? 7 4.fl ...
- SSH三大框架笔面试总结
Java工程师(程序员)面题 Struts,Spring,Hibernate三大框架 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建Sess ...
- Java面试葵花宝典
面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的一 ...
- java面试题小全
面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的 ...
随机推荐
- JAVA内存管理之堆内存和栈内存
我们常常做的是将Java内存区域简单的划分为两种:堆内存和栈内存.这种划分比较粗粒度,这种划分是着眼于我们最关注的.与对象内存分配密切相关的两类内存域.其中栈内存指的是虚拟机栈,堆内存指的是java堆 ...
- Node.js Express 框架 GET方法
GET 方法 以下实例演示了在表单中通过 GET 方法提交两个参数,我们可以使用 server.js 文件内的 process_get 路由器来处理输入: index.htm 文件代码如下: < ...
- IDEA 将已有项目添加到git
首先,我们解决的情况是,已经有了一个正在开发的项目,现在我们要把他分享到git@osc上面去. 1.第一步,当然是先在Git@OSC上创建仓库,拿到Git@OSC仓库的HTTP连接http://git ...
- npm 安装远程包(github的)
npm install git+ssh://git@github.com:xxx/xxx.git#master --save-dev npm install git+ssh://git@github. ...
- Linux内核USB驱动【转】
本文转载自:http://www.360doc.com/content/12/0321/14/8363527_196286673.shtml 注意,该文件是2.4的内核的驱动源文件,并不保证在2.6内 ...
- Linux-4.4-x86_64 内核配置选项简介【转】
转自:http://fx114.net/qa-188-150553.aspx 本篇文章主要介绍了"Linux-4.4-x86_64 内核配置选项简介",主要涉及到Linux-4.4 ...
- ubuntu vim8.0源码安装
安装篇 从https://github.com/vim/vim下载相应zip源码文件,利用unzip vim-master.zip 命令解压到当前用户目录,即~: 解压后进入vim的src目录,首先, ...
- DP专题训练之HDU 1087 Super Jumping!
Description Nowadays, a kind of chess game called "Super Jumping! Jumping! Jumping!" is ve ...
- 【转】Tomcat版本是32位、64位问题
转载地址:http://www.cnblogs.com/greensleeves/p/3168541.html 最近遇到一个Tomcat windows安装版本是32位还是64位问题.由于一系列原因, ...
- Icon字体制作
工具网站:https://icomoon.io 这个网站是免费的 功能也很强大 不过我那是铁通网络,导致这个网站不能访问,做vpn跳转就可以了 正题: 点击这里进入制作页面: 点击这里选取 svg 矢 ...