1. 程式人生 > >curl post上傳檔案的“failed creating formpost data“錯誤

curl post上傳檔案的“failed creating formpost data“錯誤

之前寫過一個php使用curl上傳檔案的程式碼,今天暴出了一個bug,curl錯誤資訊為"failed creating formpost data"

先說一下curl上傳檔案的過程吧

$file =array("upimg"=>"@/tmp/tmp.jpg");//檔案路徑,前面要加@,表明是檔案上傳.
$url = 'http://localhosts/upload.php';
$ch = curl_init();
curl_setopt($ch ,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$file);
curl_exec($ch);
這裡有兩個地方需要注意:

1、$file必須是陣列

2、上傳檔案的路徑前面加@

3、路徑必須使用決定路徑

現在分析出現"failed creating formpost data" 錯誤原因

首先很快就定位到出現該問題的原因是路徑問題,分析了程式程式碼也沒發現什麼問題,始終不得解

最後通過錯誤日誌查得這個原因是因為curl post提交的資料引數中有一個引數內容是以@符號開頭的,

比如說要上傳/tmp/tmp.jpg,同時提交簡介,這樣引數值就是 path='/tmp/tmp.jpg', 輸入簡介desc='@test haha';

根據手冊上說curl post提交資料有兩種方式

1.curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp');

2.curl($ch, CURLOPT_POSTFIELD, '
[email protected]
/tmp/tmp.jpg&filename=tmp')


在有上傳檔案的情況下必須使用第一種方式

curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp');


這樣如果第一字元是@符後面的內容均會被解析成地址,如果地址不存在就會丟擲該錯誤,就想簡介desc @test 這個路徑是不存在的

第二種方式只會將其當作普通字串處理

相關推薦

curl post檔案的“failed creating formpost data錯誤

之前寫過一個php使用curl上傳檔案的程式碼,今天暴出了一個bug,curl錯誤資訊為"failed creating formpost data" 先說一下curl上傳檔案的過程吧 $file =array("upimg"=>"@/tmp/tmp.jpg");

okhttp post 檔案以及Multipart/form-data 的學習理解

在app 中,最基本的設定使用者頭像,需要進行頭像的圖片上傳,那就會使用到 post 進行上傳檔案的操作。必然要了解下 Multipart/form-data 的含義。以前在寫這部分程式碼的時候,不理解Headers.of(xxx)什麼意思,而且 裡面填寫的格式

Shell 程式設計用CURL 模擬POST 檔案 解決417 Expectation

話不多說直接拋程式碼 curl -H "Expect:" -F "passport=monitor_134" -F "[email protected]/root/monitor/result/mid_1_rule_1.txt" http://192.168.1

C#中PUT和POST檔案

HttpClient中上傳檔案 上一篇主要是提到了HttpClient幫助類,這次針對於上傳檔案進行補充,僅做記錄 public static string HttpUploadFile(string url, string path) {

C# WebApi Post檔案大小限制

需要修改兩個地方   一般都在  web.config裡 <configuration> <system.web> <httpRuntime maxRequestLength="102400" executionTi

POST檔案

原文:https://blog.csdn.net/xiaojianpitt/article/details/6856536 POST上傳檔案 最早的HTTP POST是不支援檔案上傳的,給程式設計開發帶來很多問題。但是在1995年,ietf出臺了rfc1867,也就是《RFC 186

ajax 檔案post檔案,ajax 提交 JSON 格式的資料

ajax簡介 前後臺做資料互動 前後端做資料互動的方式(三種):     (1)瀏覽器視窗輸入地址(get的方式)(2)form表單提交資料(3)ajax提交資料 特點 特點:  (1)非同步       非同步與同步的區別:同步是請求發過去,要等著迴應;非同步不

httpclient post 檔案

@RequestMapping(value = "/uploadChatPicture", method = { RequestMethod.GET, RequestMethod.POST })     @ResponseBody     public Map<Stri

通過 HTTP POST 檔案到伺服器

2. 上傳之前使用者無法預知上傳檔案的數目. 3. 因為是 ASP.NET 應用, 客戶端可能沒有裝 .NET Framework. 其實,我們知道.如果要跟 IE 端客戶檔案系統互動的話,程式碼必須在客戶端執行. 這個時候我們可以寫一個 Activex 控制元件來實現選擇資料夾和上傳. 一般我們常用兩種方

Httpclient 以multipart/form-data形式post檔案及提交引數

在大學裡由於要做某些英語聽力作業,是在PC客戶端上的,而做完提交後顯示的答案又沒辦法複製,再重新填寫的話答案就消失了,所以懶得去記,好在答案圖片並不複雜,便想做一個可以識別出圖片中的英文的小軟體。因為我自己並沒有做OCR的經驗,於是我就到網上找可以線上識別文字的網站,找著找著

java、 http模擬post檔案到服務端 模擬form檔案

需求是這樣的: **1,前後端分離,前端對接pc軟體進行檔案同步的介面,後的springboot微服務進行檔案接收和處理。 2,軟體不能直接呼叫微服務的介面進行上傳,只能先走一下前端controller進行轉發過來()。 3,這樣就只能用httpclien

關於curl模擬檔案

在用curl模擬上傳的時候遇到一個小問題,所以記錄下來: 在 curl 中設定表單,包括檔案上傳網上很多都是這樣的 $post_data = array( "file" => "@" . "檔案所在路徑" ); $

Android OkHttp Post檔案並且攜帶引數

這裡整理一下 OkHttp 的 post 在上傳檔案的同時,也要攜帶請求引數的方法。 使用 OkHttp 版本如下: compile 'com.squareup.okhttp3:okhttp:3.4.1' 程式碼如下: protected void po

android http通過post檔案和提交引數(通過拼裝協議)

HttpURLConnection conn = null; DataOutputStream outStream = null;try{           String BOUNDARY = "---------------------------7da2137580

HttpClient通過post檔案和提交引數

       //new一個DiskFileItemFactory型別的物件factory(檔案工廠)                   DiskFileItemFactory factory = new DiskFileItemFactory();                   //為factory

OkHttp Post檔案,攜帶引數

使用 OkHttp 版本如下: compile 'com.squareup.okhttp3:okhttp:3.4.1' public void upLoadFile(final

Android POST檔案

/** * 上傳檔案到伺服器類 *  * @author tom */public class UploadUtil {    private static final String TAG = "uploadFile";    private static final i

OKhttp post檔案

 /**      * java.io.FileNotFoundException: /storage/emulated/0/note01.md: open failed: EACCES (Permission denied)      * 檔案未找到的異常....開啟失敗

OkHttp 3.0之後版本GET、POST請求以及POST檔案的示例程式碼

首先說一下2.x到3.x關於POST請求的請求體類的改變: 在2.x中是 類名是:FormEncodingBuilder() 在3.x中是 類名是: FormBody,但是一般使用是 FormBody.builder() 目前網上很多示例程式碼都是

http使用post檔案時,請求頭和主體資訊總結

HEADER:  寫道 ...... Content-Type: multipart/form-data; BODY: Content-type: multipart/form-data, boundary=AaB03x --AaB03x content-d