2

Trying to make a cURL PHP API call to WEocr, but I can't receive a response by the API. Here's the code I am using:

    $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));

I don't know if i'm writing a incorrect syntax of the cURL command.

Thanks in advance.

The error i'm getting:

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

1 Answer 1

2

I guess your path isn't correct, try this:

$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);

Update based on your comments, also try this:

$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);

Note: You don't need to set CURLOPT_POST 1 if you're using CURLOPT_POSTFIELDS , curl do that for you automagically. Curl also sets the Content-Type: multipart/form-data, if the post content is an array, that's your case, no need for that too.


CURLOPT_POSTFIELDS

The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. The filetype can be explicitly specified by following the filename with the type in the format ';type=mimetype'. This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data. As of PHP 5.2.0, value must be an array if files are passed to this option with the @ prefix. As of PHP 5.5.0, the @ prefix is deprecated and files can be sent using CURLFile. The @ prefix can be disabled for safe passing of values beginning with @ by setting the CURLOPT_SAFE_UPLOAD option to TRUE.

Sign up to request clarification or add additional context in comments.

9 Comments

Thank you, now I get no error but I'm not getting any response. Might be the "outputformat"? the API says "If you specify outputformat =" txt ", the first line of the output data is used as the status line. The first line will be blank upon sucessful recognition. "
What do you get from echo $result ?
Nothing, a blank response.
I don't know that api, what response are you suppose to receive?
i really sorry, but I don't know hot to help you further :(
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.