【问题标题】:How to do Google API batch request using python httplib or urllib2?如何使用 python httplib 或 urllib2 进行 Google API 批处理请求?
【发布时间】:2014-12-30 04:11:48
【问题描述】:

用户授权“读取”权限后,我需要获取用户的所有电子邮件。我有 access_token/refresh_token 可以帮助我为每封电子邮件进行单独的调用。我想对所有 message_ids 进行批处理请求以减少所涉及的时间。这是我的批处理请求代码,但失败了。

import httplib,urllib

def fetch_batch():
    headers = {'Authorization' : 'Bearer ya29.swCasdjkfgsdalkfgsadfgasdjhgasdkjfasgdfaksdf', 'Host' : 'www.googleapis.com', 'Content-Type' : 'multipart/mixed; boundary=demoabc_wp'}

    body="""demoabc_wp
    Content-Type: application/http

    GET /gmail/v1/users/uabc.kp1@gmail.com/messages/1497474ajsd

    demoabc_wp
    Content-Type: application/http

    GET /gmail/v1/users/uabc.kp1@gmail.com/messages/149744safdg

    demoabc_wp
    """
    h = httplib.HTTPConnection('www.googleapis.com')
    h.request('POST', '/batch', body, headers)
    print h.getresponse().read()

这将作为响应:

<HTML>
<HEAD>
    <TITLE>Bad Request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
    <H1>Bad Request</H1>
    <H2>Error 400</H2>
</BODY>
</HTML>

提前致谢。 参考:https://developers.google.com/gmail/api/guides/batchBatch fetching messages performance

【问题讨论】:

    标签: oauth-2.0 google-api batch-processing urllib httplib


    【解决方案1】:

    你搞砸了多部分编码。试试

    import httplib,urllib
    
    def fetch_batch():
        headers = {'Authorization' : 'Bearer ya29.swCasdjkfgsdalkfgsadfgasdjhgasdkjfasgdfaksdf', 'Host' : 'www.googleapis.com', 'Content-Type' : 'multipart/mixed; boundary=demoabc_wp'}
    
        body="""--demoabc_wp
    Content-Type: application/http
    
    GET /gmail/v1/users/uabc.kp1@gmail.com/messages/1497474ajsd
    
    --demoabc_wp
    Content-Type: application/http
    
    GET /gmail/v1/users/uabc.kp1@gmail.com/messages/149744safdg
    
    --demoabc_wp--
    """
        h = httplib.HTTPSConnection('www.googleapis.com')
        h.request('POST', '/batch', body, headers)
        print h.getresponse().read()
    

    注意,任何边界的开头都是2个连字符,如果是最后一个边界,则在末尾附加2个连字符

    【讨论】:

    • 我认为您应该尝试使用代码发出请求。这是一个 400 错误。尽管我使用了您建议的确切语法,但它仍然显示 400 错误。我想还有一些我想念的东西。
    • 2 个问题,必须是 https,并且在正文中的东西破坏东西之前有空格。以上作品,除了投诉原因不是有效的授权。请注意,即使有这些修复,它仍然需要连字符
    【解决方案2】:

    Google APIs Python 客户端库提供built-in support for batch requests,从长远来看应该是一个更容易维护的解决方案。

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 2019-05-17
      • 1970-01-01
      • 2016-07-05
      • 2016-12-29
      • 1970-01-01
      相关资源
      最近更新 更多