Python使用requests提交标签

4

所以,我需要为上传的视频设置标签,但我无法让它工作。 以下是标签表单:

<input id="video_keywords" class="ui-autocomplete-input" type="text" onchange="checkTags()" onkeyup="checkTags()" size="72" name="keywords" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true">

这是我目前的代码:

payload = {
      'keywords': 'tag1 tag2 tag3',
      'APC_UPLOAD_PROGRESS': apc,
      'message' : '',
  }
  files = {'upload_file' : (open("D:\\CPA\\videos\\watermarked\\test.avi", 'rb'))}
  url = 'http://upload.site.com/account/uploads/submit?video_type=other'
  r = s.post(url,data = payload,files = files,headers = headers)

我尝试了很多不同的方法,将标签格式化为带有或不带有空格的列表,尝试将字符串编码为json,但网站仍然返回需要提交标签的消息。有人知道我做错了什么吗?

还有一件事,在浏览器中检查http头/请求时,我注意到每当我输入标签时,我会从网站收到一个GET请求,看起来像这样:
GET /account/title_blacklist/?title=tag1%20tag2 (也许这个有用?)


这段 code 是用哪种编程语言写的? - Jaromanda X
好的 - 看到了 javascript 标签,想知道是什么意思。 - Jaromanda X
那个特定的表单可能会调用Javascript,所以我添加了那个标签。 - Roland Withers
2个回答

1

有各种可能的原因导致这不起作用,但这里提供的信息不足以确定原因。以下是一些可能的原因:

  • 很可能,checkTags() Javascript函数正在对标签进行某种验证。根据您展示的GET请求,它正在向服务器执行一些AJAX操作,可能正在查找黑名单标签。或者,它只是将它们发送到服务器以使其格式“验证”(可能性较小)。为了测试这个,我会尝试在该URL中使用不同的标签来玩耍GET请求。通过观察结果,您可能更好地了解可以发送哪些标签。您还可以尝试使用浏览器的开发人员工具(例如Chrome)在将其发送到此表单时查看POST数据。
  • 也有可能表单中存在某种CSRF令牌。服务器在发送表单时生成此类令牌,并在之后的短时间内有效。它与表单数据一起发送回服务器。当服务器接收到表单时,将检查令牌的有效性。它存在的目的是防止其他人(特别是恶意网站)向他们的表单提交表单数据。出于安全原因,服务器可能不会在其响应中提及CSRF令牌,而是说标签是错误的原因。
所有这些可能性都可以通过检查开发者工具中网页发送的请求以及检查整个
的源代码来进行检查,而不仅仅是特定的。希望这可以帮助!

谢谢您的回复。不幸的是,当我使用Live HTTP Headers和Firebug监视浏览器时,我只能看到GET请求。我无法看到我发送给浏览器的POST请求。 - Roland Withers
1
我可以在Chrome的开发者工具(Ctrl-Shift-I),网络选项卡中看到POST请求。您甚至可以按请求类型进行排序,并在那里查看请求标头和正文。 - brenns10
哇,我居然解决了。我在Chrome的开发者工具中看到了POST头,并且发现表单实际上应该被命名为“tags”,而不是“keywords”。这么简单我感觉自己像个白痴。非常感谢。 - Roland Withers
干得好!我很高兴你能找到问题! - brenns10

0

我解决了这个问题。 实际上应该使用“标签”调用表单,而不是使用它的名称。 有点奇怪,但现在已经解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接