2013-10-31 94 views
0

我试图从我的django模板传递一些参数给kaltura。在Django模板中向外部服务器/ url发出POST请求

这是我迄今为止所做的。

 <form id="kalturarequest" action="www.kaltura.com/api_v3/" method="post" enctype="multipart/form-data"> 
     {% csrf_token %} 
      <input type="hidden" id="ks" name="ks" value=""/> 
      <input type="hidden" id="service" name="service" value="uploadToken" /> 
      <input type="hidden" id="action" name="action" value="upload"/> 
      <input type="hidden" id="uploadTokenId" name="uploadTokenId" value=""/>   
      <input type="file" name="fileData" id="fileData"/>  
      <input type="submit" onclick="return Checkfiles();" class="btn-primary upload-btn-height" id="uploadBtnNew" value="Submit" /> 
     </form> 

但不是发布形式www.kaltura.com/api_v3/地址,这是发布形式与mysite本身。

请帮助我,我怎样才能使它工作,所以这种形式应该张贴到www.kaltura.com/api_v3/的代替L- ocalhost:8000/www.kaltura.com/api_v3/

+0

可能重复的[HTML表单POST跨域](http://stackoverflow.com/questions/8497609/html-form-post-cross-domain) – llazzaro

+0

我们可以做到这一点,而无需通过协议? – RnD

+0

您使用简单的html发布请求将邮寄请求传递至www.kaltura.com/api_v3/。我不认为这是好的方法。所有人都可以通过在浏览器中看到源代码来查看您的tokenId,服务名称。您是否需要保护表单数据? –

回答

1

你忘了协议(HTTP或HTTPS可能?):

<form id="kalturarequest" action="http://www.kaltura.com/api_v3/" method="post" enctype="multipart/form-data"> 
+0

同意但我们可以做没有协议? – RnD

+0

如果你省略了协议,http-server会认为它是本地文档。从当前路径中,它将查找名为“www.kaltura.com”的目录和子目录“api_v3”,以将表单发布到其索引文件。所以是的,如果你想与外部服务器通信,你必须指定协议。 – manonthemat

2

为了使这项工作,并省略协议的地方两条斜线的开头:

//www.kaltura.com/api_v3/ 

现在的形式提交的位置是正确的(它会使用与包含表单的页面的url相同的协议)。

如果你很好奇,看看这里:http://tools.ietf.org/html/rfc3986#section-3

0

如果要创建一个形式,而不是在Django验证它那么就没有必要列入{%csrf_token%}。

我的建议是建立一个Django的形式,验证用户输入您的视图,然后使用像requests库(或蟒蛇library Kaltura provides),使API请求。

相关问题