【问题标题】:Sending JSON Object in URL在 URL 中发送 JSON 对象
【发布时间】:2013-07-10 22:40:54
【问题描述】:

我正在使用 python 中的 diffbot api,它们具有一个功能,您可以在一个 HTTP 请求中发送包含 50 个 URL 的批处理请求。问题是我不知道如何构建这样的脚本。

我一开始就被卡住了,但这就是我所拥有的。

import requests
import json

url = 'http://www.diffbot.com/api/'

batch = {"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fblogs.wsj.com%2Fventurecapital%2F2012%2F05%2F31%2Finvestors-back-diffbots-visual-learning-robot-for-web-content%2F%3Fmod%3Dgoogle_news_blog%26token=XXX"},{"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fgigaom.com%2Fcloud%2Fsilicon-valley-royalty-pony-up-2m-to-scale-diffbots-visual-learning-robot%2F%26token=XXX"}

r = requests.get(u+batch)

现在,我当然得到了 str 和 tuples 不能连接的错误,但我只是不知道如何以 URL 的形式传递 json 对象。

如果有人能指出我正确的方向,将不胜感激。

这是一个如何使用 curl 执行调用的示例,如果有人知道如何在 python 中重新创建它。

我似乎无法让它发挥作用。以下 curl 代码在文档中作为示例提供。知道如何在 python 中重新创建它吗?

curl
    -d 'token=...'
    -d 'batch=[
            {"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fblogs.wsj.com%2Fventurecapital%2F2012%2F05%2F31%2Finvestors-back-diffbots-visual-learning-robot-for-web-content%2F%3Fmod%3Dgoogle_news_blog%26token=..."},
        {"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fgigaom.com%2Fcloud%2Fsilicon-valley-royalty-pony-up-2m-to-scale-diffbots-visual-learning-robot%2F%26token=..."}
    ]'
http://www.diffbot.com/api/batch

【问题讨论】:

    标签: python api httprequest python-requests


    【解决方案1】:

    您可能希望先序列化,然后再进行 Base64 编码。

    import base64
    encoded = base64.urlsafe_b64encode(json.dumps(batch))
    

    现在可以安全地嵌入 URL。

    要将它返回到一个对象:

    json.loads(base64.urlsafe_b64decode(encoded))
    

    【讨论】:

      【解决方案2】:

      根据the documentation,你应该做以下事情:

      1. 以 HTTP POST 而非 GET 方式发送数据。
      2. 发送请求正文中的数据,而不是 URL。
      3. 您的批次应该在一个列表中,而不是一个隐式元组。
      4. 您也应该发送令牌。

      正确的代码看起来更像:

      import requests
      import json
      
      batch = [{"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fblogs.wsj.com%2Fventurecapital%2F2012%2F05%2F31%2Finvestors-back-diffbots-visual-learning-robot-for-web-content%2F%3Fmod%3Dgoogle_news_blog%26token=XXX"},{"method": "GET", "relative_url": "/api/article?url=http%3A%2F%2Fgigaom.com%2Fcloud%2Fsilicon-valley-royalty-pony-up-2m-to-scale-diffbots-visual-learning-robot%2F%26token=XXX"}]
      batch_dumped = json.dumps(batch)
      
      token = 'sample token'
      
      r = requests.post('http://www.diffbot.com/api/batch', data={'token': token, 'batch': batch_dumped})
      

      【讨论】:

        猜你喜欢
        • 2016-05-26
        • 2015-04-27
        • 2020-07-24
        • 2018-08-21
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        相关资源
        最近更新 更多