2016-08-29 64 views
0

我很難通過cURL請求上傳.csv文件到RESTful API。我收到一個成功響應(200 OK),但沒有數據顯示提交:cURL csv文件提交返回OK狀態,但沒有上傳數據

{ 
    "meta": [ 
    ], 
    "code": 200, 
    "object": "csvfile", 
    "data": [ 
    ], 
    "time": 1472464675 
} 

這是被以下要求而作出。我已經添加了評論功能,打破每個CURL_SETOPTS的:

// create a CURLFile object 
    $cfile = curl_file_create($fileName,'text/csv', $fileName); 

    // start curl request 
    $curl = curl_init(); 

    // assign POST data 
    $data = array('file' => $cfile); 

    // specify POST request 
    curl_setopt($curl, CURLOPT_POST, true); 

    // basic auth 
    curl_setopt($curl, CURLOPT_USERPWD, getenv('USERNAME').':'.getenv('PASSWORD')); 

    // destination URI 
    curl_setopt($curl, CURLOPT_URL, 'https://api.arestfulapi.com'); 

    // associate curlfile 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 

    // since we're using PHP 5.6 we need to enable CURLOPT_SAFE_UPLOAD 
    curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); 

    // return options 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); 
    curl_setopt($curl, CURLOPT_VERBOSE, true); 
    curl_setopt($curl, CURLOPT_STDERR, $out); 

    $response = curl_exec($curl); 
    $err = curl_error($curl); 

    // debugging 
    if ($err) { 
     echo "cURL Error #:" . $err; 
    } else { 
     echo("CURL RESPONSE: "); 
     echo $response; 
    } 
    curl_close($curl); 

我應該提,我不完全理解CURLfile對象$postname領域的重要性。此外,我並不完全確定我在assign POST data中做了什麼,如構造文檔(http://php.net/manual/en/class.curlfile.php)中所示。

注意:我在Laravel應用程序中編寫此代碼,並意識到Guzzle客戶端,但選擇以這種方式提出問題,因爲對SO上的典型cURL問題有更多的支持。我相信這個問題與我的cURL文件創建有關,但花了數小時的時間來確定它。

什麼可能導致此問題?

回答

0

我找到了解決方案。我再次使用Guzzle客戶端重新處理了請求,並最終取得了成功。以下是我的解決方案的副本:

// instantiate Guzzle http request 
    $client = new \GuzzleHttp\Client(); 

    // provide an fopen resource 
    $filepath = 'public/'.$fileName; 
    $body = fopen($fileName, 'r'); 

    // make the request 
    $res = $client->request('POST', 'https://api.website.com', [ 
     'auth' => [ 
      getenv('USERNAME'), 
      getenv('PASSWORD') 
     ], 
     'body' => $body 
    ]); 

    echo ("STATUS CODE: "); 
    echo $res->getStatusCode(); 
//  200 
相關問題