首页 > 编程知识 正文

qpython,python requests

时间:2023-05-06 01:09:50 阅读:50397 作者:258

1.urllib2.urlopen(request ) url='http://www.baidu.com '

#url也可以是其他协议(如ftp )的路径

values={ ' name ' : ' Michael foord '、' location':'Northampton '和language':'Python'}

data=urllib.urlencode(values )

user _ agent=' Mozilla/4.0 (兼容; MSIE5.5; WindowsNT ) '

headers={ ' user-agent ' : user _ agent }

request=urllib2.request(URL,data,headers ) )。

#也可以这样设置header:request.add _ header (' user-agent ',' fake-client ' )

response=urllib2. urlopen (request )

html=response.read (

因此,实际上urllib2的urlopen ()方法是打开url的最基本用法,需要传递参数request。 实际上,它是一个常见的request对象,可以包含url、data ),用于将数据(如常规表单数据)传输到服务器,并设置header参数) )的服务器

最后检索的网页必须使用response对象的read ()方法读取。 否则,只能获取一个对象的内存地址。

2 .创建操作者对象以实现cookie和其他HTTP功能

2.1饼干处理

urlopen ()函数不支持认证、cookie或其他HTTP高级功能。 要支持这些功能,必须使用build_Opener ()函数创建自己的自定义opener对象。

要管理HTTP cookie,必须创建添加了HTTP cookie处理器处理程序的操作者对象。 默认情况下。 HTTPCookieProcessor使用CookieJar对象,提供不同类型的CookieJar对象作为HTTPCookieProcessor的参数,并支持不同的cookie处理。 (mcj=cookie lib.mozillacookiejar (' cookies.txt ' ) ) ) ) ) ) ) )。

cookie hand=http cookie processor (mcj )

opener=urllib2. build _ opener (cookie hand ) ) ) ) ) ) ) ) )。

u=opener.open (http://www.Baidu.com) )。

2.2认证password _ mgr=urllib2. httppasswordmgrwithdefaultrealm (

top _ level _ URL=' http://www.163.com/'

password_mgr.add_password(none,top_level_url,username,password )。

handler=urllib2. httpbasicauthhhandler (password _ mgr ) ) ) ) ) )。

opener=urllib2. build _ opener (handler ) )。

urllib2.install_opener(opener ) )。

2.3代理

urllib2会自动检测代理设置,默认情况下使用环境变量http_proxy设置HTTP Proxy。 如果希望程序明确Proxy的使用而不受环境变量的影响,可以通过创建ProxyHandler实例并将该实例用作build_opener ()的参数来实现。 importurllib2

enable_proxy=True

proxy _ handler=urllib2. proxy handler ({ ' http ' : ' http://some-proxy.com :8080 ' } )

null _ proxy _ handler=urllib2. proxy handler { }

ifenable_proxy:

opener=urllib2. build _ opener (proxy _ handler ) ) ) ) ) ) ) ) )。

else:

(opener=urllib2. build _ opener (null _ proxy _ handler ) ) ) ) ) 652

urllib2.install_opener(opener ) )。

要注意的一个详细信息是使用urllib2.install_opener ) )设置urllib2的全局操作器。 虽然以后的使用很有用,但是不能控制更精细的粒度,例如程序中想使用两个不同的Proxy设置。 建议直接调用opener的open方法,而不是简单地使用install_opener更改全局设置。

lopen 方法。

2.4  Timeout设置

在老版本中,urllib2 的 API 并没有暴露 Timeout 的设置,要设置 Timeout 值,只能更改 Socket 的全局 Timeout 值。importurllib2

importsocket

socket.setdefaulttimeout(10) # 10 秒钟后超时

urllib2.socket.setdefaulttimeout(10) # 另一种方式

在新的 Python 2.6 版本中,超时可以通过 urllib2.urlopen() 的 timeout 参数直接设置。importurllib2

response = urllib2.urlopen('http://www.google.com', timeout=10)

2.5  设置Header

在urlopen()基本用法中有提基本的用法:request = urllib2.Request(url, data, headers)

也可以在生成了request对象之后设置importurllib2

request =urllib2.Request(uri)

request.add_header('User-Agent', 'fake-client')

response = urllib2.urlopen(request)

对有些 header 要特别留意,Server 端会针对这些 header 做检查,User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request

Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析。application/xml :在 XML RPC,如 RESTful/SOAP 调用时使用

application/json :在 JSON RPC 调用时使用

application/x-www-form-urlencoded :浏览器提交 Web 表单时使用

……常见的取值有:

在使用 RPC 调用 Server 提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致 Server 拒绝服务。

2.6  Redirect重定向

urllib2 默认情况下会针对 3xx HTTP 返回码自动进行 Redirect 动作,无需人工配置。要检测是否发生了 Redirect 动作,只要检查一下 Response 的 URL 和 Request 的 URL 是否一致就可以了。importurllib2

response =urllib2.urlopen('http://www.google.cn')

whether_redirected = response.geturl() == 'http://www.google.cn'

如果不想自动 Redirect,除了使用更低层次的 httplib 库之外,还可以使用自定义的 HTTPRedirectHandler 类。importurllib2

class RedirectHandler(urllib2.HTTPRedirectHandler):

def http_error_301(self, req, fp, code, msg, headers):

pass

def http_error_302(self, req, fp, code, msg, headers):

pass

opener =urllib2.build_opener(RedirectHandler)

opener.open('http://www.google.cn')

2.7  使用 HTTP 的 PUT 和 DELETE 方法

urllib2 只支持 HTTP 的 GET 和 POST 方法,如果要使用 HTTP PUT 和 DELETE,只能使用比较低层的 httplib 库。虽然如此,我们还是能通过下面的方式,使 urllib2 能够发出 HTTP PUT 或 DELETE 的包:importurllib2

request =urllib2.Request(uri, data=data)

request.get_method = lambda: 'PUT'# or 'DELETE'

response = urllib2.urlopen(request)

这种做法虽然属于 Hack 的方式,但实际使用起来也没什么问题。

2.8  获取HTTP返回码

对于 200 OK 来说,只要使用 urlopen 返回的 response 对象的 getcode() 方法就可以得到 HTTP 的返回码。但对其它返回码来说,urlopen 会抛出异常。这时候,就要检查异常对象的 code 属性了:importurllib2

try:

response =urllib2.urlopen('http://restrict.web.com')

except urllib2.HTTPError, e:

print e.code

2.9  Debug Log

使用 urllib2 时,可以通过下面的方法把 Debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便我们调试,在一定程度上可以省去抓包的工作。import urllib2

httpHandler =urllib2.HTTPHandler(debuglevel=1)

httpsHandler =urllib2.HTTPSHandler(debuglevel=1)

opener =urllib2.build_opener(httpHandler, httpsHandler)  urllib2.install_opener(opener)

response = urllib2.urlopen('http://www.google.com')

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。