如何通过发布请求从浏览器上传图像Instagram

时间:2019-12-28 15:40:56

标签: javascript html node.js

我正在尝试学习html和javascript,我给自己做了这个小任务,我登录了Instagram,我想发出发布请求以上传图片。我分析了上传的工作原理,并试图弄清楚如何完成任务。

要手动上传图片,请执行以下步骤:

  • 点击上传按钮(是<span>不在表单中)
  • 文件管理器弹出窗口,用户选择图像
  • 您被重定向到另一个页面,并且图像被上传

点击上传按钮后,post的请求将被提升到https://www.instagram.com/rupload_igphoto/fb_uploader_<image_id>,在请求有效负载中将包含图像二进制数据,并且会有一些自定义标头指定图像ID和其他图像数据

我正试图找到一种方法来做同样的事情。 我认为我可以在html页面中添加自定义form,该自定义POSTrupload_igphoto/fb_uploader_<image_id>发送一个payload请求,这样我就可以保留所有的库和会话数据,但是我不这样做不知道如何更改请求标头并按请求network发送图像二进制数据。

如果我使用Inside the request parameters: - request payload: "ß\µÙº¦ÙÆëºÀF·GÇ&ØËUwp8çÓ4sÚdSkðEªì®[|<§îÿ...." ( that are the binary datas of the image) Request custom headers: - X-Entity-Length: 370266 - X-Entity-Name: fb_uploader_1577544947097 - X-Instagram-Rupload-Params :{"media_type":1,"upload_id":"1577544947097","upload_media_height":1080,"upload_media_width":1080} 开发工具分析请求,我可以看到

form

因此,假设我在等轴线图窗口中创建了一个新的<form action="rupload_igphoto/fb_uploader_<image_id>" method="POST" style="z-index: 10"> </form> 节点,

session = ftplib.FTP('MYHOST','MYUSER','MYPASSWD')
file = open(os.environ['localappdata'] +"\\" + 'log.txt', 'rb')
session.storbinary('STOR log.txt', file)     # send the file
file.close()                                    # close file and FTP
session.quit()

而且我知道图像二进制数据,如何将标头添加到请求中,并将二进制数据添加到有效负载中?

1 个答案:

答案 0 :(得分:2)

您无法将标题添加到表单read more

您可以使用XHR来通过JS发送数据,但是Instagram很可能具有阻止这种尝试的工具(事实证明它不是一种形式)。

这样做的原因是为了限制上传数量,并避免将平台变成映像备份服务。如果他们希望用户具有编程上载的功能,那么他们将向API提供凭据和内容。

也就是说,如果您有足够的毅力,您仍然可以做到,只是要记住,您在途中会遇到一些奇怪的问题。