将terminal cURL命令转换为PHP cURL请求

时间:2014-03-09 21:36:41

标签: php rest curl here-api

我正在尝试将PHP的cURL请求发送到Here Maps的RESTFUL Batch API。

文档指出,使用这个cURL脚本,我可以发送一个包含我需要的数据的数据文件:

curl -X POST -H "Content-Type: text/plain" --data-binary @addresses.txt
            "http://batch.geocoder.cit.api.here.com/6.2/jobs?
         &app_code=AJKnXv84fjrb0KIHawS0Tg
         &app_id=DemoAppId01082013GAL
         &action=run
         &header=true
         &inDelim=;
         &outDelim=,
         &outCols=recId,latitude,longitude,locationLabel
         &mailto=<my_email>
         &outputcombined=true
         &language=de-DE"

我正在尝试将其转换为PHP。我想出了以下代码:

$cURLHandler = curl_init();
$url = "http://batch.geocoder.cit.api.here.com/6.2/jobs?&app_code=AJKnXv84fjrb0KIHawS0Tg&app_id=DemoAppId01082013GAL&action=run&mailto=trisztanthar@mailinator.com&outCols=recId,latitude,longitude,locationLabel&outputcombined=true&inDelim=;&outDelim=;";
if($cURLHandler) {
    curl_setopt($cURLHandler, CURLOPT_HTTPHEADER, array('Content-Type: text/plain')); 
    curl_setopt($cURLHandler, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($cURLHandler, CURLOPT_POST, 1);
    curl_setopt($cURLHandler, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($cURLHandler, CURLOPT_POSTFIELDS, array('addresses' => new CurlFile("./batchjob.txt", 'text/plain', "batchjob.txt")));
    curl_setopt($cURLHandler, CURLOPT_URL, $url);
    curl_exec($cURLHandler);
    curl_close($cURLHandler);
}
else {
    throw new RuntimeException("Nem sikerült felvenni a kapcsolatot egy távoli szerverrel.");
}

使用它时,我收到以下错误:

  

仅管道(|),分号(;),冒号(:),制表符('')和逗号(,)   允许分隔符。

首先我想,该文件存在问题,但我尝试在unix终端中运行终端命令,该文件与我尝试与PHP一起使用的文件相同,并且它没有遇到任何问题,正确的响应,所以我使用的PHP代码100%没有发布文件。

我目前正在使用MAMP Server(OSX)在localhost上进行开发。 batchFile.txt文件位于/Applications/Mamp/htdocs/php/文件夹(localhost/php/batchfile.txt)。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以从命令行直接将文件作为二进制数据发布。所以发送如下内容。

curl_setopt($cURLHandler, CURLOPT_POSTFIELDS, file_get_contents("batchjob.txt"));