【问题标题】:Using GET and POST with Authorization HTTP header in Python在 Python 中使用带有授权 HTTP 标头的 GET 和 POST
【发布时间】:2011-09-04 19:23:57
【问题描述】:

我正在尝试获取我在 Google 地图中创建的地图列表,地图 API 显示以下内容:


检索地图列表

地图数据 API 提供了一个提要,其中列出了由特定用户创建的地图;此提要称为“元提要”。典型的 Maps Data 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 请求都需要一个 Authorization 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 docs,但看不懂(我不是专业程序员)。

有什么线索吗?

【问题讨论】:

    标签: python http http-headers google-api


    【解决方案1】:

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

    顺便说一句,Google Maps Data API 不是已弃用吗? http://googlegeodevelopers.blogspot.com/2010/11/maps-data-api-deprecation-announcement.html

    【讨论】:

    • 你成功了!我知道会有一些直接的方法来做到这一点。现在,对于 Maps Data API 的弃用,有些网站说一回事,有些网站说另一回事……让我们看看这是否有效!
    • 是的,它有效,我返回一个包含所有地图信息的 XML 字符串,但我要么不知道如何处理数据,而且 API 确实已被弃用。因此,我将继续使用正则表达式从该字符串中获取 MapIDs 并自动以 KML 格式下载地图:'http://maps.google.com.br/maps/ms?msid=USERID.MAPID&msa=0&output=kml
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2017-01-17
    • 2021-03-24
    • 2018-10-12
    • 2017-05-22
    相关资源
    最近更新 更多