在Python中使用GET和POST以及Authorization HTTP标头

时间:2011-09-04 19:23:58

标签: python http http-headers google-api

我正在尝试获取我在Google地图中创建的地图列表,而Maps API会说明以下内容:


检索地图列表

Maps Data API提供了一个供稿,列出了特定用户创建的地图;这种饲料被称为“metafeed”。典型的Maps Data API元供稿是以下形式的GET请求:

默认Feed会请求与经过身份验证的用户关联的所有地图

GET http://maps.google.com/maps/feeds/maps/default/full
Authorization: GoogleLogin auth="authorization_token"

标准元供稿请求与相关用户ID相关联的所有地图

GET http://maps.google.com/maps/feeds/maps/userID/full
Authorization: GoogleLogin auth="authorization_token"

请注意,两个GET请求都需要授权HTTP标头,并传递AuthSub或GoogleLogin令牌,具体取决于您实施的身份验证方案。 (GoogleLogin令牌对应于ClientLogin身份验证过程。)


我不知道如何使用Authorization HTTP标头创建HTTP请求。我已经有代码来获取authorization_token,如下所示:

# coding: utf-8

import urllib, re, getpass

# http://code.google.com/intl/pt-BR/apis/maps/documentation/mapsdata/developers_guide_protocol.html#ClientLogin

username = 'heltonbiker'
senha = getpass.getpass('Senha do usuário ' + username + ':')

dic = {
        'accountType':      'GOOGLE',
        'Email':            (username + '@gmail.com'),
        'Passwd':           senha,
        'service':          'local',
        'source':           'helton-mapper-1'
        }
url = 'https://www.google.com/accounts/ClientLogin?' + urllib.urlencode(dic)
output = urllib.urlopen(url).read()
authid = output.strip().split('\n')[-1].split('=')[-1]

我还看了httplib个文档,但不太了解(我不是专业程序员)。

有任何线索吗?

1 个答案:

答案 0 :(得分:8)

使用urllib2可以让一切变得更轻松:

import urllib2

request = urllib2.Request('http://maps.google.com/maps/feeds/maps/default/full')
request.add_header('Authorization', 'GoogleLogin auth=%s' % authorization_token)
urllib2.urlopen(request).read()
BTW,不推荐使用Google Maps Data API吗? http://googlegeodevelopers.blogspot.com/2010/11/maps-data-api-deprecation-announcement.html