2014-01-22 2 views
0

다음 json 문자열 http://pastebin.com/wnkiLqvP이 있는데 베타 페이스 API에 게시하려고합니다. 포스트는 cURL을 통해 PHP로 수행되며 포스트를 수행하는 기능은 다음과 같습니다 또한json 문자열이있는 API로 요청을 보내는 중 오류가 발생했습니다.

function bcall_endpoint($endpoint,$json_params){ 
    //Init CURL 
    $ch = curl_init($endpoint); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST,   1); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,  $json_params); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
    $result = curl_exec($ch); 
    return $result; 
} 

, 다음 코드 조각에 의해 생성되는 페이스트 빈 파일의 JSON 문자열 :

$beta = array(
    'api_key'=>'d45fd466-51e2-4701-8da8-04351c872236', 
    'api_secret'=>'171e8465-f548-401d-b63b-caf0dc28df5f', 
    'imagefile_data'=>$base64, 
    'detection_flags'=>'cropface,recognition,propoints,classifiers,extended' 
); 
$beta = json_encode($beta); 

$ base64는 파일의 base64 문자열입니다.

$file = file_get_contents($_FILES['file']['tmp_name']); 
$base64 = base64_encode($file); 

이 API 엔드 포인트는 여기 http://www.betafaceapi.com/service_json.svc/UploadNewImage_File 이상이며, API의 버전은 JSON와 함께 작동 : 다음과 같은 base64로 문자열을 만들었습니다. 끝점으로 모든 것을 보내려고하면 응답을 받아야합니다. 응답보다 Rathar, 나는 실제로 모든 PARAMS와 컬 게시물을 수행 한 후 다음을 얻을 :

HEADERS 

Access-Control-Allow-Origin: * 
Cache-Control: private 
Content-Length: 1110 
Content-Type: text/html 
Date: Wed, 22 Jan 2014 07:55:32 GMT 
Server: Microsoft-IIS/7.5 
X-Aspnet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
X-Powered-By-Plesk: PleskWin 
BODY view raw 

<html version="-//W3C//DTD XHTML 2.0//EN" xml:lang="en" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <HEAD> 
    <TITLE>Request Error</TITLE> 
    </HEAD> 
    <BODY> 
    <DIV id="content"> 
     <P class="heading1"> 
     <B>Error Status Code:</B> 'InternalServerError' 
     </P> 
     <P> 
     <B>Details: </B>There was an error deserializing the object of type BetafaceWebService.ImageRequestBinary. End element 'imagefile_data' from namespace '' expected. Found text '/'. 
     </P> 
     <!-- Padding xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--> 
    </DIV> 
    </BODY> 
</html> 

나는이 오류가 왜 누군가가 나에게 지적시겠습니까 : 형 BetafaceWebService의 객체를 직렬화 복원하는 중 오류가 발생했습니다 .ImageRequestBinary. 끝 요소 'imagefile_data'이 (가) 예상되는 네임 스페이스입니다. '/'텍스트를 찾았습니다. ?

파일을 업로드하고 API 끝점에서 POST를 실행하면 PHP 응답이 NULL 인 것으로 보입니다. 그러나 페이지의 소스를보고 다시 새로 고침을 누른 다음 양식 제출을 다시 보내면 API에서 프로퍼 응답을받습니다.

누군가가 나에게 무슨 문제가 있는지 알려 줄 수 있습니까? 나는 이것을 어제부터 이해하려고 애를 먹었고 해결책을 찾지 못했습니다.

UPDATE : PHP 나 나는 다음과 같은 결과를 얻을 수를 생성하는 JSON 문자열로 jsonlint을 사용한 후 :

Parse error on line 4: 
... "imagefile_data": "\/9j\/4AAQSkZJRgABA 
-----------------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[' 

JSON 문자열에 대한 크기에 어떤 제한이 있습니까?

+1

API 보안을 숨겨야합니다. – user658991

+0

그것은 공개 비밀 :) 그게 문제가 아니에요. 하지만 당신의 의도에 대한 감사합니다 – roshkattu

답변

0

"/"는 "/"에 대한 이스케이프 시퀀스이며 "\"는 유효한 base64 문자가 아닙니다. base64로 인코딩 된 이미지 데이터에서 "\"를 모두 제거하십시오.

+0

모든 "\"문자를 제거한 후 게시물을 보내려고 할 때 500 내부 서버 오류가 발생합니다 – roshkattu

+0

오류 내용을 공유 하시겠습니까? – user658991

+0

오류 사양이 없습니다. API 엔드 포인트는 "500 INTERNAL SERVER ERROR"를 리턴합니다. – roshkattu

0

다소 늦지 만 Content-Length 헤더를 추가하십시오.

관련 문제