对于初学者,这里是组标头的含义:
API文档完全没有提及加载。通过非官方客户的尝试不再有帮助,因为他们没有实现这一点(参考这个问题)。通过查看请求,我发现调用签名看起来不像这里列出的任何文件上传方法/方法。所以,我能够从请求中打开:
- 上传到标头的每个文件都有一个_sig。它会随着请求的不同而发生奇怪的变化,但是没有它您将无法下载该文件。
如果我们捕捉到 VK 请求,那么我们将获得一个静态链接来下载该文件。这个静态链接工作正常,当你访问它时,它会这样说:
{"error":"ERR_UPLOAD_FILE_NOT_UPLOADED: file not found","bwact":"owner_cover","server":836521,"mid":151665536,"_sig":"83447078c5079124026b80d90f116398"}
然而,在代码中执行下载后,我们得到:
{"error":"ERR_UPLOAD_BAD_SIGNATURE","bwact":"owner_cover","server":836521,"_sig":"d762c16dc795c4f65b59aafdaa39628a"}
- VK 使用的方法(通常该方法在act参数中可见。比方说,当加载音频消息时,它是add_doc),不在文档中,看起来像这样:act=owner_cover。
万岁!万岁!万岁!问题又解决了 :) 是的,我马上就说,先生们,这里的问题比我之前解决的要复杂得多-tyk。
注意:我们将使用 cookie 发出所有请求。没有他们-什么都没有。
不管怎样,让我们开始吧:
我们得到一个链接来下载我们的地毯(在 VK 中,盖子称为封面):
https://vk.com/al_page.php
act=owner_photo_box&al=1&cover=1&oid=-id вашей группы
https:\/\/pu.vk.com\/c837731\/upload.php?act=owner_cover&oid=-136618761&square=&mid=151665536&server=837731&_origin=https%3A%2F%2Fvk.com&_sig=c55042259e8ee7c612cdcd9861961cdf
我们使用上一段中获得的链接将照片上传到 VK 服务器:
我在此处(Java 标准库)描述了如何以multipart/form-data格式上传文件,或者您可以使用OkHttp库更短、更漂亮地上传文件- 该过程在此处描述。注意:现在 VK 只接受post 请求中带有file字段的图像!像这样(在 Java 中)- multipart.addFilePart("file", uploadFile1); 如果图像位于具有不同名称的字段中,您将收到以下错误:
{“error”:“ERR_UPLOAD_FILE_NOT_UPLOADED:找不到文件”,“bwact”:“owner_cover”,“server”:638219,“mid”:151665536,“_sig”:“9417bfeb4cca32304ed587818d931931”}
作为回应,我们将收到以下格式的照片描述:
保护我们的艺术作品:
https://pu.vk.com/c837731/upload.php?act=owner_cover_crop&_query={"oid":"-136618761","photo":{"photo":"2b522d8e86x","sizes":[["x","837731536","18aa5","tuY07_54Ovk",795,497],["y","837731536","18aa6","RxPs7YD5hCs",1590,994],["o","837731536","18aa7","nmZ4LwQDbgw",2880,1800]],"kid":"621fad611afefb9048b478bcc627ab12","debug":"xxoyooo"},"x_src":"v837731536\/18aa5\/tuY07_54Ovk.jpg","x_size":[795,497],"size":[2880,1800],"bwact":"owner_cover","server":837731,"mid":151665536,"_sig":"efb64dcfd413f8e1cd52c86c9ffe98d6"}
这是我们将要访问的 URL。
{"oid":"-136618761","data":["xAAzIYwAAAAAx7sTQAAGK9PZcylgWKxNsYAAGK9fJJ411totivOAAGK9vsNtLPCSRjQAAAGK91LwRyB-lQoPBAAGK-LTMIdOtvbDACAAGK-W1AR45kIrfADAAGK-n6SOgL5ttKpEAAGK-6ApZsVYFCSa","0,0,795,200",0,"810,1080","795,1060"],"bwact":"owner_cover_crop","server":837731,"mid":151665536,"_sig":"7e008ee2a25eaafe4921763ee3b3691d"}
我们强制 VK 服从并将我们长期受苦的图片插入标题:
https://vk.com/al_page.php
_query={"oid":"-136618761","data":["xAAzIYwAAAAAx7sTQAAGKnqTNf2fQ6fuoYAAGKn3Z9dX-ImPaLOAAGKoG1FCgvWBDhHAAAGKqJRsM9D7RwUzBAAGKqWp6mu7odOTZCAAGKqsVKNMJ80uh9DAAGKq99X4PZhrf1wEAAGKrFjQIUH8hRcw","0,536,2880,724",0,"2880,1800","795,497"],"bwact":"owner_cover_crop","server":837731,"mid":151665536,"_sig":"3aeeb1dff8888aed8bf8f65c91568bb0"}&act=owner_photo_save&al=1&from=groups
上传照片时请注意照片的分辨率。如果不合适,VK 将开始裁剪,但您可以在请求中指定尺寸(我认为很清楚在哪里以及如何裁剪)。一般来说,VK推荐1590×400 ...
感谢您的关注!希望它能帮助某人...
最近有这样的 API 方法:
photos.getOwnerCoverPhotoUploadServer
照片.saveOwnerCoverPhoto
我们调用第一个方法(这里要求我们选择一个区域进行裁剪,如果指定非比例795x200,所选区域的顶部将被裁掉),从收到的链接下载文件,传递收到的哈希和照片到第二种方法 - 更新标题。