http - Wie strukturiert man die Anforderungsdaten so, dass der Anforderungstext mehrere Grenzen aufweist, wenn PHP CURL die Backend-API (POST) anfordert?

WBOY
Freigeben: 2016-08-04 09:19:47
Original
2030 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

Ausgehend von den von der API benötigten Daten php curl muss der erstellte Post-Anfragetext beim Senden von Post-Daten zwei content-type

enthalten

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>
Nach dem Login kopieren
Nach dem Login kopieren

Antwortinhalt:

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>
Nach dem Login kopieren
Nach dem Login kopieren

Ausgehend von den von der API benötigten Daten php curl muss der erstellte Post-Anfragetext beim Senden von Post-Daten zwei content-type

enthalten

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>
Nach dem Login kopieren
Nach dem Login kopieren

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_FOLLOWLOCATIONCURLOPT_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>
Nach dem Login kopieren

-Content-Type: application/json: json_encode

-content-type: octet-stream:
php>5.6

<code>$file_data = array('image' => new \CURLFile(realpath($source)));</code>
Nach dem Login kopieren
php<=5.5

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage