当前位置: 首页 > 知识库问答 >
问题:

使用curl上传文件到django服务器

法池暝
2023-03-14

在Django python服务器上,我定制了一个用户可以上传文件的URL。现在的问题是,当我点击浏览器时,我能够成功地上传文件,但当我使用curl尝试同样的事情时,我无法做到这一点。

意见。派克

import json

from django.http import HttpResponse
from django.template import Context, RequestContext
from django.shortcuts import render_to_response, get_object_or_404

# -*- coding: utf-8 -*-
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

from sdm.models import Document
from sdm.forms import DocumentForm

def lists(request):
   # Handle file upload
   if request.method == 'POST':
     form = DocumentForm(request.POST, request.FILES)
     if form.is_valid():
        newdoc = Document(docfile = request.FILES['docfile'])
        newdoc.save()

        # Redirect to the document list after POST
        return HttpResponseRedirect(reverse('sdm:lists'))

else:
    form = DocumentForm() # A empty, unbound form

# Load documents for the list page
documents = Document.objects.all()

# Render list page with the documents and the form
return render_to_response(
    'sdm/lists.html',
    {'documents': documents, 'form': form},
    context_instance=RequestContext(request)
)

........ ........ ........ ........

名单。html

 <!DOCTYPE html>
 <html>
 <head>
    <meta charset="utf-8">
    <title>Minimal Django File Upload Example</title>   
 </head>
 <body>
 <!-- List of uploaded documents -->
 {% if documents %}
    <ul>
    {% for document in documents %}
        <li><a href="{{document.docfile.url }}">{{ document.docfile.name }}</a></li>
    {% endfor %}
    </ul>
 {% else %}
    <p>No documents.</p>
 {% endif %}

    <!-- Upload form. Note enctype attribute! -->
    <form action="{% url sdm:lists %}" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <p>{{form.non_field_errors }}</p>
        <p>{{form.docfile.label_tag }} {{form.docfile.help_text }}</p>
        <p>
            {{ form.docfile.errors }}
            {{ form.docfile }}
        </p>
        <p><input type="submit" name="press" value="Upload" /></p>
    </form>
 </body>
</html> 

在浏览器上

在终点站,我试过了

 $ curl --request PUT --upload-file filename http://wings.spectrumserver/sdm/lists

 $ curl --form upload-file=filename  --form press=Upload 

 http:// wings. spectrumserver/sdm/lists

$ curl --upload-file filename http://wings.spectrumserver/sdm/lists
$ curl --upload-file filename press=upload http://wings.spectrumserver/sdm/lists

$ curl -H 'Expect:' -F data=@filename -F submit=Upload wings.spectrumserver/sdm/lists

// In all cases, No error but no file upload

我尝试了一些其他的变化,但似乎没有成功。我还尝试了一些其他命令,它们给出了“无csrf令牌错误”。我还尝试从html文件和设置中删除csrf令牌。py但没有任何效果。

我对卷曲和蟒蛇都很陌生。主要目的是上传文件使用一些python脚本。我想如果我可以通过curl上传,那么同样的东西可以用curl库在python脚本中复制,所以如果这不起作用,那么任何人都可以建议一些python代码将文件上传到这个服务器。

编辑:

$ curl -i -F name=press -F f13 wings.spectrumserver/sdm/lists
Warning: Illegally formatted input field!
curl: option -F: is badly used here
curl: try 'curl --help' or 'curl --manual' for more information

Edit2-标头响应(f13是未包含的新文件)

$ curl -i http://wings.spectrumserver/sdm/lists

HTTP/1.1 200 OK
日期:2013年11月7日星期四23:19:18 GMT服务器:Apache/2.2.22(Ubuntu)
更改:接受编码内容长度:1263内容类型:text/html;字符集=utf-8

最小Django文件上传示例

    <ul>

        <li><a href="/media/documents/2013/10/28/templates.zip">documents/2013/10
    /28/templates.zip</a></li>

        <li><a href="/media/documents/2013/11/07/list">documents/2013/11/07/list</a>
    </li>

        <li><a href="/media/documents/2013/11/07/f1">documents/2013/11/07/f1</a></li>

        <li><a href="/media/documents/2013/11/07/f12">documents/2013/11/07/f12</a></li>

        <li><a href="/media/documents/2013/11/07/hello.html">documents/2013/11
        /07/hello.html</a></li>

    </ul>


    <!-- Upload form. Note enctype attribute! -->
    <form action="/sdm/lists" method="post" enctype="multipart/form-data">

   <!--            
   -->        <p></p>
        <p><label for="id_docfile">Select a file</label> max. 42 megabytes</p>
        <p>

            <input type="file" name="docfile" id="id_docfile" />
        </p>
        <p><input type="submit" name="press" value="Upload" /></p>
    </form>
  </body>
</html> 

共有3个答案

融建树
2023-03-14

我无法用卷曲来解决这个问题。

但是如果你能编程python3:

Django对跨站点引用伪造(CSRF)有保护

您需要在表格中使用CSRF cookie和隐藏的CSRF。

因此,您需要首先获取下载页面(如浏览器),提取CSRFs并使文章包含这些数据。

POST必须是多部分/表单数据格式。

在Linux机器中查看这种格式的一种方法是:

1-创建一个Django上传页面,表单操作指向(比如)http://127.0.0.1:2222/

2-打开终端并执行:nc-l 127.0.0.1 2222

3-在上传页面打开浏览器,用一些要上传的小文本填写表单,然后按下上传按钮。浏览器会投诉,没问题...

4-在终端中,您将看到浏览器如何使用POST上传文件

要实施解决方案,请执行以下操作:

5-检查链接http://blog.spotflux.com/uploading-files-python-3其中,它使用python3以多部分/表单数据格式制作文章。

6-您需要在此示例中进行一些更改,以便在帖子中包含cookie。

使用html。解析器。HTMLPasser来解析HTML页面。

它工作正常,但我不能发布代码。

我没有尝试使用requests.get()和requests.post()。

严昀
2023-03-14

我认为是CSRF令牌丢失了。

{% csrf_token %}

查看django文档跨站点请求伪造保护。它是一个令牌生成,以确保表单是从同一个域提交的。您可以通过从模板中删除标记来禁用CSRF保护。或者尝试在这里如何使用curl传递它。

顺便说一句,如果您只想使用python脚本上传,我建议您使用请求。

url = 'http://wings.spectrumserver/sdm/lists'
files = {'file': open('file.ext', 'rb')}
r = requests.post(url, files=files)
程赞
2023-03-14

试试这样的东西:

curl -i --form docfile=@localfilename http://wings.spectrumserver/sdm/lists

如果不起作用,发布你的标题回复-i告诉curl打印标题响应。

 类似资料:
  • 如何将文件发送到WebService?为了上传文件,我需要使用multipart/form-data;我想知道如何使用PHP中的curl来实现这一点。 我的代码是: 服务器上的故障是: 我怎样才能解决这个问题?

  • 我想上传一个文件到不同的服务器使用卷曲。我读过许多类似的问题,但我没有得到任何解决我的问题。下面是我现在得到的代码: 当我运行此脚本时,它将保持运行200秒,并以以下方式响应: Sep 17 20:56:58 xxxxx vsftpd[2613]:[user]确定登录:客户端“yyyyy” Sep 17 20:56:58 xxxxx vsftpd[2618]:[用户]FTP响应:客户端“YYYYY

  • 我使用的是Alamofire 5,我正试图将图像上传到火箭聊天服务器。我需要使用AF复制的对应curl语句位于以下链接:(链接到文档:https://docs.rocket.chat/api/rest-api/methods/rooms/upload) 我一直在尝试使用multipartFormData上传,但没有成功。我还试图完全绕过Alamofire,使用Swift URLSession。我所

  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 是否可以使用server1将文件上传到server2? 访客请访问:我的网站。com(server1) 然后他将一个文件上传到server1,server1会自动将该文件上传到server2?? 或者简单地说,用户可以使用server1作为代理将文件上传到server2,因为server2只能从server1访问 会有帮助吗,还是有其他更好的解决方案?

  • 本文向大家介绍Java使用SFTP上传文件到服务器的简单使用,包括了Java使用SFTP上传文件到服务器的简单使用的使用技巧和注意事项,需要的朋友参考一下 最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询。具体代码如下所示: 这里的用户名密码都是自己设置,这里的方法进行了简单的封装,方便使用。 以上所述是小编给大家介绍的Java使用SFTP上传文件到服务器的简单使用,希望对