URN Logo
UNIX Resources » Linux » China Linux Forum » Python 编 程 » 10 » 怎么取得HTTP连接时的状态码?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
怎么取得HTTP连接时的状态码?
怎么取得HTTP连接时的状态码? - gcd0318 [2005-04-20 14:29 | 183 byte(s)]
 
Re: 怎么取得HTTP连接时的状态码? - xyb [2005-04-20 16:41 | 228 byte(s)]
 
Re: 怎么取得HTTP连接时的状态码? - gcd0318 [2005-04-21 16:40 | 448 byte(s)]
 
Re: 怎么取得HTTP连接时的状态码? - passworld [2005-04-21 19:25 | 134 byte(s)]
 
Re: 怎么取得HTTP连接时的状态码? - gcd0318 [2005-04-22 10:54 | 177 byte(s)]
 
Re: 怎么取得HTTP连接时的状态码? - passworld [2005-04-22 17:07 | 901 byte(s)]
 
Re: 怎么取得HTTP连接时的状态码? - passworld [2005-04-22 12:46 | 1,202 byte(s)]
 
Re: 怎么取得HTTP连接时的状态码? - limodou [2005-04-20 16:00 | 50 byte(s)]
 
Subject: 怎么取得HTTP连接时的状态码?
Author: gcd0318    Posted: 2005-04-20 14:29    Length: 183 byte(s)
[Original] [Print] [Top]
如果是4xx和5xx的状态码,可以在异常里获得,但是其他的呢?尤其3xx的也是很有用的,表示重定向,这时候需要通过这个状态码来判断。但是PYTHON把连接的这些信息似乎都封装的很严密,怎么才能得到?
[Original] [Print] [Top]
Subject: Re: 怎么取得HTTP连接时的状态码?
Author: limodou    Posted: 2005-04-20 16:00    Length: 50 byte(s)
[Original] [Print] [Top]
我记得好象是可以的。还是再看一看文档吧。记不清了。
----
[Original] [Print] [Top]
Subject: Re: 怎么取得HTTP连接时的状态码?
Author: xyb    Posted: 2005-04-20 16:41    Length: 228 byte(s)
[Original] [Print] [Top]
urllib2和httplib都可以完成这种功能,看lib ref就好了。比如:
http://docs.python.org/lib/httplib-examples.html
[Original] [Print] [Top]
Subject: Re: 怎么取得HTTP连接时的状态码?
Author: gcd0318    Posted: 2005-04-21 16:40    Length: 448 byte(s)
[Original] [Print] [Top]
这个方法偶试过,但是这个方法需要事先知道相关的页面。可是如果是某个网站的首页就是被重定向到其他位置的呢?
比如连接http://www.nju.edu.cn,这时的重定向是直接进行的,也就是说我并不知道这个域名下默认连接的页是哪一页,而是直接就被带到了另外一个页面。而对于页内嵌套代码进行的重定向,又似乎完全没有效果,因为返回的是200 OK,这时的重定向是由页面里的代码完成的。
这些时候用例子里的方法就无效了,因为例子里的方法需要向某一个特定的页发送请求
[Original] [Print] [Top]
Subject: Re: 怎么取得HTTP连接时的状态码?
Author: passworld    Posted: 2005-04-21 19:25    Length: 134 byte(s)
[Original] [Print] [Top]
页面内嵌代码的重定向自然是你自己分析了页面内容以后自己做的了。
http 只管 http,怎么能管到 html 里的东西?

[Original] [Print] [Top]
Subject: Re: 怎么取得HTTP连接时的状态码?
Author: gcd0318    Posted: 2005-04-22 10:54    Length: 177 byte(s)
[Original] [Print] [Top]
但是那些3xx的属于服务器的重定向,和页面无关,而且即使用geturl()也只能得到所在的网络文件夹,还是无法得到确切路径。有的会在页内脚本里写出具体的路径,但是也有很多页面做的没这么规矩
[Original] [Print] [Top]
Subject: Re: 怎么取得HTTP连接时的状态码?
Author: passworld    Posted: 2005-04-22 12:46    Length: 1,202 byte(s)
[Original] [Print] [Top]

教你一个窍门,python 的源码写的都很简单,基本上会写程序的大多数模块都能写出来。碰到怪问题可以直接看代码,然后Mixin或者直接复制过来改代码。

从代码看,urllib.URLOpener 本身是没有处理 3xx 的,这时你只能自己处理这个重定向,这对于大多数程序员来说是没有必要的麻烦,所以有urllib.FancyURLOpener,它帮你做了处理重定向的问题,如果它处理了重定向,给出的码自然是2xx了。urlopen() 只是帮你新建了一个FancyURLOpener 的对象罢了。

你可以有自己的 http_error_3xx() Mixin 加到 FancyURLopener 上或者干脆继承它。然后处理。

对于 urllib2 也一样,看看代码就知道怎么自己解决了。Python的优势在于语言简单,所以谁也不比谁高明多少,不像perl,“高手”写出来的码让别人看,不是神经有问题的,基本上一点都看不懂。

至于说内嵌的不规则重定向,那些东西本来就是给一个完整的浏览器处理的,容易的话IE,mozilla也不用写得这么大了。你要想不用浏览器自己处理,那就是在和网页作者做斗争,网页用了 javascript, flash 来做网页,如果python内建能够分清它们,岂不是python要内建javascript, flash解释器了?你需要利用所有可以利用的工具:re, htmlparse... 针对具体网页做处理,完全自动的只能覆盖80%的网页,不可强求啊。连mozilla有时候碰上ie专门的网页也会座在那儿,不懂了。
[Original] [Print] [Top]
Subject: Re: 怎么取得HTTP连接时的状态码?
Author: passworld    Posted: 2005-04-22 17:07    Length: 901 byte(s)
[Original] [Print] [Top]
我看到的url是目标url,不是开始的url:

Python 2.3.5 (#2, Mar 26 2005, 17:32:32)
[GCC 3.3.5 (Debian 1:3.3.5-12)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib
>>> u=urllib.urlopen('http://www.sf.net')
>>> u.url
'http://sourceforge.net/index.php'
>>> u.geturl()
'http://sourceforge.net/index.php'
>>>

如果你说的网络文件夹是 http://www.slashdot.org/ 这样的名称,那么这是没有办法的,因为服务器给的就是这个,在某些服务器上就是这个,没有具体文件名。这你又要花时间去研究http服务器了。

[Original] [Print] [Top]
« Previous thread
请教一个用boost.python在应用程序中嵌入python问题?
Python 编 程
10
Next thread »
How to print header from python CGI ?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:11:14, cost 0.041114807128906 ms.