在Python中使用带Authorization头的GET和POST请求

5 投票
1 回答
5097 浏览
提问于 2025-04-17 01:26

我想在谷歌地图上获取我创建的地图列表,地图API给出了以下信息:


获取地图列表

地图数据API提供了一个可以列出特定用户创建的地图的接口,这个接口被称为“元数据源”。一个典型的地图数据API元数据源是通过GET请求来获取的,格式如下:

默认的数据源请求的是与已认证用户相关的所有地图。

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的认证过程。)


我不知道怎么创建带有授权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 个回答

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()

顺便问一下,谷歌地图数据API不是已经不再支持了吗? http://googlegeodevelopers.blogspot.com/2010/11/maps-data-api-deprecation-announcement.html

撰写回答