【问题标题】:How to Send post response as image from python requests如何从 python 请求中将发布响应作为图像发送
【发布时间】:2016-02-28 19:31:32
【问题描述】:

我正在尝试让我的图像在线托管,为此我正在使用 python

import requests 
url = 'http://imgup.net/'
data = {'image[image][]':'http://www.webhost-resources.com/wp-content/uploads/2015/01/dedicated-hosting-server.jpg'}
r = requests.post(url, files=data)

我无法从响应中获取托管图像的响应 url。 请帮忙!

【问题讨论】:

  • r.text 为我提供了相同的 html 页面,其中不包含来自服务器端的发布响应!
  • 如果您尝试下载图像,请使用beautifulSoup
  • 请求文档说你必须提供一个字典,其值是一个类似文件的对象,而不是一个 URL。
  • @RahulRao 我成功了,等一下,我正在编译我的答案。

标签: python web python-requests


【解决方案1】:
  1. requests.post 的files 参数需要一个:

用于分段编码上传的'name': file-like-objects(或{'name': ('filename', fileobj)})字典。

  1. 您需要发送的数据不仅仅是文件,最重要的是“真实性令牌”。如果您查看页面的源代码,它会将所有其他参数显示为<input type="hidden"> 标签。

  2. 上传网址为http://imgup.net/upload,从<form>的action属性可以看出。


所以你需要做的是:

  1. 下载你要上传的图片(我就叫它dhs.jpg)。

  2. 做一个主页的GET请求,提取authenticity_token。

  3. 完成后,使用files= 和data= 发送请求:

‌

url = "http://imgup.net/upload"
data = {'utf8': '&#x2713;', 'authenticity_token': '<put your scraped token here>', '_method': 'put'}
f = open("dhs.jpg", "rb")  # open in binary mode
files = {'image[image][]': f}
r = requests.post(url, files=files, data=data)
f.close()
print(r.json()["image_link"]

最后说明:虽然我在他们的 T&C 中找不到任何反对这种行为的规则,但真实性令牌的存在使得 imgup 似乎并不真的希望你自动执行此操作 .

【讨论】:

  • 如果我的问题很清楚,你能解决吗?
  • 我认为没有真实性令牌。如果它是非法的,请纠正我,因为代码在没有任何身份验证的情况下工作谢谢兄弟!
猜你喜欢
  • 2020-12-06
  • 2021-11-06
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
相关资源
最近更新 更多