백엔드 API 요청 시 백엔드에서 받는 데이터 형식은 다음과 같습니다.
<code class="bash">请求方法: post 请求body: //part1,content-type:application/json { "description": "desdes" } //part2,content-type: octet-stream { "product_img": octet-stream file, "config_img ": octet-stream file, "dopm": octet-stream file } </code>
API에서 요구하는 데이터 중 php curl
포스트 데이터 전송 시 구성된 포스트 요청 본문에는 content-type
하나는 일반 데이터Content-Type: application/json
한 가지 요구 사항은 content-type: octet-stream
, 바이너리 스트림, 주로 사진 및 기타 형식의 파일을 스트림 형식으로 변환하고 API로 전송하여 저장합니다
우리는 보통 curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
을 사용하여 요청 본문을 설정하는데, 이 형식으로 요청 본문을 구성하는 방법은
<code class="php"> $header = NULL; $body = []; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); if(!is_null($header)){ curl_setopt($curl, CURLOPT_HTTPHEADER, $header); } curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_TIMEOUT, 10); $curl_get = curl_exec($curl); </code>
백엔드 API 요청 시 백엔드에서 받는 데이터 형식은 다음과 같습니다.
<code class="bash">请求方法: post 请求body: //part1,content-type:application/json { "description": "desdes" } //part2,content-type: octet-stream { "product_img": octet-stream file, "config_img ": octet-stream file, "dopm": octet-stream file } </code>
API에서 요구하는 데이터 중 php curl
포스트 데이터 전송 시 구성된 포스트 요청 본문에는 content-type
하나는 일반 데이터Content-Type: application/json
한 가지 요구 사항은 content-type: octet-stream
, 바이너리 스트림, 주로 사진 및 기타 형식의 파일을 스트림 형식으로 변환하고 API로 전송하여 저장합니다
우리는 보통 curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
을 사용하여 요청 본문을 설정하는데, 이 형식으로 요청 본문을 구성하는 방법은
<code class="php"> $header = NULL; $body = []; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); if(!is_null($header)){ curl_setopt($curl, CURLOPT_HTTPHEADER, $header); } curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_TIMEOUT, 10); $curl_get = curl_exec($curl); </code>
파일을 스트림 형식으로 변환하는 데 CURLFile
을 사용하는 것은 사실입니다. 그런데 위 내용을 처리할 때 요청 시간 초과가 너무 짧아서 데이터 스트림 전에 tcp
링크가 끊어졌습니다.
API에 일반 CURL 요청을 할 때는 시간 초과를 10초로 설정하는 것이 좋습니다. 파일 업로드 시간이 너무 오래 걸릴 경우 링크 시간과 제한 시간을 늘리세요
CURLOPT_FOLLOWLOCATION
, CURLOPT_TIMEOUT
<code>$header = NULL; $body = [ 'img' => new CURLFile('imagepath', 'octet-stream', 'file_name') ]; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); if(!is_null($header)){ curl_setopt($curl, CURLOPT_HTTPHEADER, $header); } //设置链接超时时间为1分钟 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_TIMEOUT, 60); $curl_get = curl_exec($curl); </code>
-콘텐츠 유형: 애플리케이션/json: json_encode
-콘텐츠 유형: 옥텟-스트림:
php>5.6
<code>$file_data = array('image' => new \CURLFile(realpath($source)));</code>
php
<code>$file_data = array('image'=> '@' . realpath($source));//<=5.5</code>