使用PHP捲曲我想連接到我已經建立的api。我無法用curl創建自定義標題,試圖指定某些標題信息,例如Content-Type,Content-Length。如何創建自定義標題並使用php curl發送json數據?
我也在努力理解如何正確發送(發佈)一個完整的json數據的http-body。
本質上,我試圖做的是擁有Content-Type,Content-Length,一些自定義字段,如$ api =>「45234523452345」,$ hashedKey =>「32413211234123」。
那麼在http-body中發送一個有效負載(數組json編碼或json編碼的多維arry)。
這是我現在想要使用的。
public function mainRequest($url, $apiKey) {
$payload = array(
'test' => 'data'
);
$jsonPayload = urlencode(json_encode($payload));
$encyptedKey = $this->dataEncyptor->hashData($apiKey);
$header = array(
'Content-Type:' => 'application/json',
'Content-Length:' => strlen($jsonPayload),
'x-public' => $apiKey,
'x-hash' => $encyptedKey
);
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $fp);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_POST, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
在我的錯誤日誌中我得到這個:
* About to connect() to local.nslim.ca port 80 (#0)
* Trying 127.0.0.1...
* connected
* Connected to local.nslim.ca (127.0.0.1) port 80 (#0)
> POST /datacheck HTTP/1.1
Host: local.nslim.ca
Accept: */*
Content-Length: 29
Content-Type: application/x-www-form-urlencoded
* upload completely sent off: 29 out of 29 bytes
< HTTP/1.1 404 Not Found
< Date: Fri, 17 Oct 2014 03:05:43 GMT
< Server: Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/0.9.8za DAV/2 PHP/5.5.3
< X-Powered-By: PHP/5.5.3
< Content-Length: 514
< Content-Type: text/html
<
* Connection #0 to host local.nslim.ca left intact
* Closing connection #0
,並輸出到屏幕:
HTTP/1.1 404未找到日期:星期五,2014年10月17日03:06: 07 GMT服務器:Apache/2.2.25(Unix)mod_ssl/2.2.25 OpenSSL/0.9.8za DAV/2 PHP/5.5.3 X-Powered-By:PHP/5.5.3內容長度:514內容類型: text/html 404 Page Not Found
頁面你正在尋找無法找到。檢查地址欄以確保您的URL拼寫正確。如果一切都失敗了,您可以通過下面的鏈接訪問我們的主頁。 訪問首頁
cURL setopt是否需要按照任何特定順序?
感謝您的幫助!
啊我的網址是正確的,因爲我已經得到了到它發送一個101繼續點。當我通過瀏覽器訪問網址時,它可以正常工作。我正在嘗試將內容類型設置爲application/json。 – floor 2014-10-17 04:54:47
可能有助於在接收端發佈代碼。如果腳本實際上在那裏,那麼你必須明確告訴它在你的代碼中發送一個404的地方。 – miken32 2014-10-17 04:57:50
對不起,跳過您設置MIME類型的位置。在Content-Type之後丟失冒號;你可以從日誌中看到,mime類型被設置爲application/x-www-form-urlencoded。 – miken32 2014-10-17 05:01:49