2017-02-21 62 views
2

我需要在PHP中重新創建此:譯「數據的二進制」從捲曲到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" 

我有這樣的:

$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); 

我的代碼不佔什麼--data-binary部分,但我不確定如何將其「翻譯」爲PHP。另外,我可以使用純數據的二進制數據(API接受它)而不是JSON嗎?

+1

在你的代碼中,'CURLOPT_HEADER'應該是'CURLOPT_HTTPHEADER'來設置請求頭。否則,POSTFIELDS與自定義Content-Type一樣正確。 – drew010

+0

@ drew010這正是問題!謝謝!如果您提交答案,我可以接受。欣賞它。 – jonmrich

回答

2

你有什麼已經是--data-binary等效。請參閱CURLOPT_POSTFIELDS API docs

您必須確保數據的格式與服務器接收數據的方式相同。 libcurl不會以任何方式爲您轉換或編碼。

比較,爲docs for the command-line --data-binary option

該職位的數據完全一樣,沒有額外的處理任何規定。

至於你問題的第二部分:

我可以使用純文本(該API接受它),而不是JSON

呀數據的二進制,既爲--data-binary從命令行和CURLOPT_POSTFIELDS從API。

+0

謝謝......這給了'415 Unsupported Media Type'錯誤,我無法追蹤下給出了這個例子中我想發送的非常簡單的字符串。 – jonmrich

+0

我認爲'415 Unsupported Media Type'只是查看'Content-Type:text/plain'標題的服務,並且說它不支持這個(儘管爲什麼我不知道,因爲你的問題表明它應該)。我猜想將其改爲'application/json'並再次嘗試將是要做的事情(如果你還沒有的話)。但無論如何,據我所知,415並不是由你的libcurl代碼發送的任何格式錯誤造成的。 – sideshowbarker

+0

我使用CLI運行完全相同的事情,它工作得很好。翻譯中是否有某些內容正在改變(或未更改)? – jonmrich