2017-02-21 4 views
2

Ich brauche dies in PHP zu erstellen:Translating "data-binary" von cURL PHP

curl -X POST --user <username>:<password> 
--header "Content-Type: text/plain;charset=utf-8" 
--header "Accept: application/json" 
--data-binary @<filename> 
"https://gateway.watsonplatform.net/personality-insights/api/v3/profile" 

Ich habe das bekam:

$request_headers = array(); 
$request_headers[] = 'Content-Type: text/plain;charset=utf-8'; 
$request_headers[] = 'Content-Language: en'; 
$request_headers[] = 'Accept-Language: en'; 

$simple_data = 'washingtonpost by the intelligence community'; 
    curl_setopt_array($ch2, array(
     CURLOPT_POST => 1, 
     CURLOPT_POSTFIELDS => $simple_data, 
     CURLOPT_HEADER => $request_headers, 
     CURLOPT_USERPWD => 'XXXX:YYYY', 
    ) 
    ); 
    $response2 = curl_exec($ch2); 

Was meinen Code nicht ist nicht Konto der --data-binary Teil, aber ich bin mir nicht sicher, wie man das in PHP "übersetzt". Kann ich außerdem Datenbinär mit Klartext (die API akzeptiert es) anstelle von JSON verwenden?

+1

In Ihrem Code sollte 'CURLOPT_HEADER'' CURLOPT_HTTPHEADER' sein, um Anforderungsheader zu setzen. Ansonsten ist POSTFIELDS korrekt wie beim benutzerdefinierten Content-Type. – drew010

+0

@ drew010 Das war genau das Problem! Vielen Dank! Wenn Sie als Antwort einreichen, kann ich akzeptieren. Bin dankbar. – jonmrich

Antwort

2

Was Sie haben, ist bereits ein --data-binary Äquivalent. Siehe CURLOPT_POSTFIELDS API docs:

Sie müssen sicherstellen, dass die Daten so formatiert sind, wie der Server sie empfangen soll. libcurl wird es in keiner Weise für Sie konvertieren oder kodieren.

Vergleichen Sie das mit der docs for the command-line --data-binary option:

Diese Beiträge Daten genau so, wie auch immer ohne zusätzliche Bearbeitung angegeben.

Was den zweiten Teil Ihrer Frage:

kann ich Daten binär mit Klartext anstelle von JSON (die API es akzeptiert)

Ja, sowohl für --data-binary von der Befehlszeile und CURLOPT_POSTFIELDS von der API.

+0

Danke ... das gibt mir '415 nicht unterstützte Medientyp' Fehler, die ich nicht finden kann angesichts der sehr einfachen Zeichenfolge, die ich versuche, in diesem Beispiel zu senden. – jonmrich

+0

Ich würde denken, dass "415 Unsupported Media Type" ist nur der Service Blick auf die 'Content-Type: text/plain'-Header und sagen, dass es nicht unterstützt (obwohl, warum weiß ich nicht, da Ihre Frage angibt, sollte es). Ich denke, das zu 'application/json' zu ändern und es erneut zu versuchen, wäre das Richtige (falls du es noch nicht getan hast). Aber soweit ich das sehen kann, wird 415 nicht von irgendeiner Fehlentwicklung in Ihrem libcurl-Code verursacht. – sideshowbarker

+0

Ich benutze genau die gleiche Sache mit dem CLI und es funktioniert einwandfrei. Gibt es etwas, das in der Übersetzung, die ich vermisse, geändert wird (oder nicht geändert wird)? – jonmrich