Python提交带有请求的标签

时间:2015-07-17 14:01:37

标签: javascript python html tags python-requests

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

<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(也许这很有用?)

2 个答案:

答案 0 :(得分:1)

有各种各样的潜在原因,这是不起作用的,但这里没有足够的信息来确定原因。以下是几个可能的原因:

  • 最有可能的是,checkTags() Javascript函数正在对标记执行某种验证。从您展示的GET请求来看,它正在为服务器做一些AJAX,并且它可能正在寻找列入黑名单的标签。或者,它可能只是将它们发送到服务器以使其格式“验证”(不太可能)。为了对此进行测试,我尝试使用对该URL的一些GET请求,在GET参数中添加不同的标记。通过查看出来的内容,您可以更好地了解允许发送的标签。您也可以尝试使用浏览器的开发人员工具(如Chrome's)在发送到此表单时查看POST数据。
  • 表单中也可能存在某种CSRF令牌。服务器在发送表单时生成这样的令牌,并且在之后的短时间内有效。它将使用表单数据发送回服务器。服务器将在收到表单时检查令牌的有效性。它的存在是为了防止其他人(特别是恶意网站)将表单数据提交给他们的表单。可能是出于安全原因,服务器不会在其响应中提及CSRF令牌,而是说标签是导致错误的原因。

通过检查网页在开发人员工具中发送的请求,以及检查<form>的整个来源,而不仅仅是特定的<input>,可以检查所有这些可能性。希望这有帮助!

答案 1 :(得分:0)

我解决了这个问题。 实际上这个表单应该用'tags'来调用,而不是用它的名字来调用。 这有点奇怪,但它现在已经解决了。