2015-04-29 4 views
2

Попытка сделать вызов PHP API cURL на WEocr, но я не могу получить ответ API. Вот код, я использую:cURL PHP API вызов не работает

$url = 'http://jimbocho.ocrgrid.org/cgi-bin/weocr/submit_ocrad.cgi'; 
    $header = array('Content-Type: multipart/form-data'); 
    $fields = array('userfile' => '@' . $_FILES['file']['tmp_name'][0]); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
    $result = json_decode(curl_exec($ch)); 

Я не знаю, если я пишу неправильный синтаксис завитка команды.

Заранее спасибо.

Ошибки я получаю:

Sorry! 
Received a null image (0byte). See TIPS page. 

ответ

2

Я предполагаю, что ваш путь не является правильным, попробуйте следующее:

$url = 'http://jimbocho.ocrgrid.org/cgi-bin/weocr/submit_ocrad.cgi'; 
$file_name_with_full_path = '/home/example/dir/sample.jpeg'; 
$post = array('userfile'=>'@'.$file_name_with_full_path); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$result=curl_exec ($ch); 
curl_close ($ch); 

обновление на основе ваших комментариев, а также попробовать это:

$file_new = /path/to/your/file.jpg 
$cmd="curl -F userfile=$file_new \ 
     -F outputencoding=\"utf-8\" \ 
     F outputformat=\"txt\" \ 
     http://maggie.ocrgrid.org/cgi-bin/weocr/ocr_scene.cgi >result.txt" 
$result = shell_exec($cmd); 
print_r($result); 

Примечание: Вам не нужно устанавливать CURLOPT_POST 1, если вы используете CURLOPT_POSTFIELDS, завиток сделает это автоматически. Curl также устанавливает Content-Type: multipart/form-data, если содержимое сообщения представляет собой массив, это ваш случай, и для этого не нужно.


CURLOPT_POSTFIELDS

Полные данные сообщения в HTTP-операции "POST". Чтобы опубликовать файл, добавьте имя файла с @ и используйте полный путь. Тип файла может быть явно указан, следуя имени файла с типом в формате '; type = mimetype'. Этот параметр может быть передан как строка urlencoded, такая как 'para1 = val1 & para2 = val2 & ...' или как массив с имя поля в качестве ключа и данных поля как значение. Если значением является массив, то заголовок Content-Type будет установлен в multipart/form-data. Начиная с PHP 5.2.0, значение должно быть массивом, если файлы передаются этому параметру с префиксом @. Начиная с PHP 5.5.0 префикс @ устарел и файлы могут быть отправлены с использованием CURLFile. Префикс @ может быть отключен для безопасной передачи значений, начинающихся с @, путем установки опции CURLOPT_SAFE_UPLOAD для ИСТИНЫ.

+0

Спасибо, теперь у меня нет ошибок, но я не получаю ответа. Может быть, «outputformat»? API говорит: «Если вы укажете outputformat =« txt », первая строка выходных данных используется как строка состояния. Первая строка будет пустой при успешном распознавании.» – joanet

+1

Что вы получаете от 'echo $ результат'? –

+0

Ничего, пустой ответ. – joanet