我想使用cURL不仅在HTTP POST中发送数据参数,而且还上传具有特定表单名称的文件。我该怎么做呢?

HTTP Post参数:

Userid = 12345 filecomment =这是一个映像文件

文件上传: 文件位置= /home/user1/Desktop/test.jpg file = image的表单名称(对应PHP端$_FILES['image'])

我认为cURL命令的一部分如下所示:

curl -d "userid=1&filecomment=This is an image file" --data-binary @"/home/user1/Desktop/test.jpg" localhost/uploader.php

我遇到的问题如下:

Notice: Undefined index: image in /var/www/uploader.php

问题是我使用$_FILES['image']在PHP脚本中拾取文件。

如何相应地调整cURL命令?


当前回答

你需要使用-F选项: -F/——form <name=content>指定HTTP多部分POST数据

试试这个:

curl \
  -F "userid=1" \
  -F "filecomment=This is an image file" \
  -F "image=@/home/user1/Desktop/test.jpg" \
  localhost/uploader.php

其他回答

我用这个命令curl -F 'filename=@/home/ yourhomedirectory /file.txt' http://yourserver/upload

导致我到这里的问题原来是一个基本的用户错误——我没有在文件的路径中包含@符号,所以curl发布的是文件的路径/名称,而不是内容。Content-Length值因此是8,而不是我期望看到的给定测试文件长度的479。

当curl读取并发布文件时,将自动计算Content-Length头。

curl -i -H "Content-Type: application/xml"——data "@test.xml" -v -X POST https://<url>/<uri/

... < Content-Length: 479 ...

把这贴在这里,以帮助其他的新手在未来。

经过多次尝试,这个命令对我来说是有效的:

curl -v -F filename=image.jpg -F upload=@image.jpg http://localhost:8080/api/upload

你需要使用-F选项: -F/——form <name=content>指定HTTP多部分POST数据

试试这个:

curl \
  -F "userid=1" \
  -F "filecomment=This is an image file" \
  -F "image=@/home/user1/Desktop/test.jpg" \
  localhost/uploader.php

如果您上传的是二进制文件,如csv,请使用以下格式上传文件

curl -X POST \
    'http://localhost:8080/workers' \
    -H 'authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6ImFjY2VzcyIsInR5cGUiOiJhY2Nlc3MifQ.eyJ1c2VySWQiOjEsImFjY291bnRJZCI6MSwiaWF0IjoxNTExMzMwMzg5LCJleHAiOjE1MTM5MjIzODksImF1ZCI6Imh0dHBzOi8veW91cmRvbWFpbi5jb20iLCJpc3MiOiJmZWF0aGVycyIsInN1YiI6ImFub255bW91cyJ9.HWk7qJ0uK6SEi8qSeeB6-TGslDlZOTpG51U6kVi8nYc' \
    -H 'content-type: application/x-www-form-urlencoded' \
    --data-binary '@/home/limitless/Downloads/iRoute Masters - Workers.csv'