2016-08-29 11 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フィールドの重要性を理解していない言及する必要があります。さらに、コンストラクションのドキュメント(http://php.net/manual/en/class.curlfile.php)で示されているように、私が何をしているのかが完全にはわかっていません。assign POST data

注:私はこれをLaravelアプリケーションで作成していますが、Guzzleクライアントを認識していますが、このように問題を提示することを選択しました。一般的な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 
関連する問題