使用sockets:从新闻组中获取文章(二)


Posted in PHP onOctober 09, 2006

与服务器对话

现在我们已经连接到了服务器,可以通过前面打开的socket同服务器对话了。比如说我们要从某个新闻组得到最近的10篇文章。RFC977指出,第一步要用GROUP命令选择正确的新闻组:
    GROUP ggg
    参数ggg是要选择的新闻组的名字(比如说是"net.news"),这是必需的。可用的新闻组的列表可以用LIST命令得到。选择新闻组的命令成功后,返回组中第一篇和最后一篇文章的文章编号,以及组中文章的数目。
    下面是一个例子:
    chrome:~$ telnet my.news.host 119
    Trying aa.bb.cc.dd...
    Connected to my.news.host.
    Escape character is '^]'.
    200 my.news.host InterNetNews NNRP server INN 2.2.2 13-Dec-1999 ready (posting ok).
    GROUP alt.test
    211 232 222996 223235 alt.test
    quit
    205 .

    接收到命令 GROUP alt.test 后,服务器返回"211 232 222996 223235 alt.test". 211是RFC中定义的返回码,指示命令已成功执行。返回信息还指出,现在有232篇文章,最早的文章的编号是222996,最新的文章的编号是223235。我们看到,222996+232并不等于223235。丢失的7篇文章因为某种原因被从服务器删除了,可能是因为被它的合法作者取消了(这是可能的,而且很容易做到),或者因为是灌水文章而被删。
    需要注意的事,有些服务器在选择新闻组之前可能要求身份认证,这取决于这是一个公共的或者是私用的服务器。也有可能服务器允许任何人读取文章,但发表文章需要身份验证。

    <?php

      //$cfgUser    = "xxxxxx";
      //$cfgPasswd  = "yyyyyy";
      $cfgNewsGroup = "alt.php";

      //identification required on private server
      if($cfgUser) {
          fputs($usenet_handle, "AUTHINFO USER ".$cfgUser."n");
          $tmp = fgets($usenet_handle, 1024);
          fputs($usenet_handle, "AUTHINFO PASS ".$cfgPasswd."n");
          $tmp = fgets($usenet_handle, 1024);

          //check error

          if($tmp != "281 Okrn") {
              echo "502 Authentication errorn";
              exit();
          }
  }

  //select newsgroup

  fput($usenet_handle, "GROUP ".$cfgNewsGroup."n");
  $tmp = fgets($usenet_handle, 1024);

  if($tmp == "480 Authentication required for commandrn") {
     echo $tmp;
     exit();
  }

  $info = split(" ", $tmp);
  $first= $info[2];
  $last = $info[3];

  printf("First : %sn", $first);
  printf("Last : %lastn", $last);

?> 

PHP 相关文章推荐
php 变量定义方法
Jun 14 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
php字符串截取的简单方法
Jul 04 PHP
php读取excel文件的简单实例
Aug 26 PHP
一个简单且很好用的php分页类
Oct 26 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
浅析Yii2缓存的使用
May 10 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
php处理复杂xml数据示例
Jul 11 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
通过ODBC连接的SQL SERVER实例
Oct 09 #PHP
如何对PHP程序中的常见漏洞进行攻击(下)
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(三)
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(一)
Oct 09 #PHP
PHP自动更新新闻DIY
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(二)
Oct 09 #PHP
层叠菜单的动态生成
Oct 09 #PHP
You might like
浅析php变量修饰符static的使用
2013/06/28 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
PHP crc32()函数讲解
2019/02/14 PHP
JavaScript中的私有成员
2006/09/18 Javascript
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
extjs render 用法介绍
2013/09/11 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
Python实现视频下载功能
2017/03/14 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
pygame实现简易飞机大战
2018/09/11 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
班长岗位职责
2013/11/10 职场文书
教你打造完美的创业计划书
2014/01/06 职场文书
迎新晚会策划方案
2014/06/13 职场文书
网络技术专业求职信
2014/07/13 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python