ai didi

python - 在 Python 中,为什么 urllib.urlopen 使 Google 给出 http 状态 "302 Moved"?

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:42 24 4
gpt4 key购买 nike

在 CentOS 6.4 上使用 Python 2.6.6

import urllib
#url = 'http://www.google.com.hk' #ok
#url = 'http://clients1.google.com.hk' #ok
#url = 'http://clients1.google.com.hk/complete/search' #ok (blank)
url = 'http://clients1.google.com.hk/complete/search?output=toolbar&hl=zh-CN&q=abc' #fails
print url
page = urllib.urlopen(url).read()
print page

使用前 3 个 URL,代码有效。但是对于第 4 个 URL,Python 给出以下 302:

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://clients1.google.com.hk/complete/search?output=toolbar&amp;hl=zh-CN&amp;q=abc">here</A>.
</BODY></HTML>

我代码中的 URL 与它告诉我使用的 URL 相同:

My URL:  http://clients1.google.com.hk/complete/search?output=toolbar&hl=zh-CN&q=abc
Its URL: http://clients1.google.com.hk/complete/search?output=toolbar&hl=zh-CN&q=abc

Google 说 URL 已移动,但 URL 是相同的。有什么想法吗?

更新:这些 URL 在浏览器中都可以正常工作。但是在 Python 命令行中,第 4 个 URL 给出了 302。

最佳答案

urllib 忽略 cookie 并发送没有 cookie 的新请求,因此它会在该 URL 处导致重定向循环。要处理这个问题,您可以使用 urllib2(这是最新的)并添加一个 cookie 处理程序:

import urllib2
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
response = opener.open('http://clients1.google.com.hk/complete/search?output=toolbar&hl=zh-CN&q=abc')
print response.read()

关于python - 在 Python 中,为什么 urllib.urlopen 使 Google 给出 http 状态 "302 Moved"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566859/

24 4 0
文章推荐: aws的ssl证书
文章推荐: python - 如何计算 z3 或 z3py 中的绝对值
文章推荐: python - 使用 Python stdin 跳过第一行?
文章推荐: python - Pandas 按日期索引求和和分组
太空宇宙
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com