2016-08-29 36 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 
相关问题