Beim Anfordern der Backend-API lautet das vom Backend empfangene Datenformat wie folgt:
<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>
Ausgehend von den von der API benötigten Daten php curl
muss der erstellte Post-Anfragetext beim Senden von Post-Daten zwei content-type
Eine davon sind gewöhnliche DatenContent-Type: application/json
Eine Voraussetzung ist content-type: octet-stream
, ein binärer Stream, hauptsächlich Bilder und andere Formatdateien werden in Stream-Form konvertiert und zum Speichern an die API übertragen
Normalerweise verwenden wir curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
, um den Anfragetext festzulegen, also wie man den Anfragetext in diesem Format erstellt
<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>
Beim Anfordern der Backend-API lautet das vom Backend empfangene Datenformat wie folgt:
<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>
Ausgehend von den von der API benötigten Daten php curl
muss der erstellte Post-Anfragetext beim Senden von Post-Daten zwei content-type
Eine davon sind gewöhnliche DatenContent-Type: application/json
Eine Voraussetzung ist content-type: octet-stream
, ein binärer Stream, hauptsächlich Bilder und andere Formatdateien werden in Stream-Form konvertiert und zum Speichern an die API übertragen
Normalerweise verwenden wir curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
, um den Anfragetext festzulegen, also wie man den Anfragetext in diesem Format erstellt
<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>
Es stimmt, dass CURLFile
zum Konvertieren der Datei in ein Stream-Formular verwendet wird. Als ich das oben genannte verarbeitete, war das Anforderungszeitlimit jedoch zu kurz, was dazu führte, dass der Link tcp
vor dem Datenstrom unterbrochen wurde wurde gesendet
Es wird empfohlen, das Timeout auf 10 Sekunden einzustellen, wenn allgemeine CURL-Anfrage-APIs erstellt werden. Wenn das Hochladen von Dateien zu lange dauert, erhöhen Sie die Linkzeit und das Timeout
, 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>
-Content-Type: application/json: json_encode
-content-type: octet-stream:
php>5.6
<code>$file_data = array('image' => new \CURLFile(realpath($source)));</code>