2014-10-17 46 views
0

使用PHP捲曲我想連接到我已經建立的api。我無法用curl創建自定義標題,試圖指定某些標題信息,例如Content-Type,Content-Length。如何創建自定義標題並使用php curl發送json數據?

我也在努力理解如何正確發送(發佈)一個完整的json數據的http-body。

本質上,我試圖做的是擁有Content-Type,Content-Length,一些自定義字段,如$ api =>「45234523452345」,$ hashedKey =>「32413211234123」。

那麼在http-body中發送一個有效負載(數組json編碼或js​​on編碼的多維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是否需要按照任何特定順序?

感謝您的幫助!

回答

1

所以顯而易見的問題是,你有正確的網址嗎? 404並不表示頁面上有錯誤,而是該頁面不存在。應該是datacheck.php?

此外,您並未將數據作爲標準Web表單發送,因此您需要將Content-Type標題更改爲'text/json',並使用php://input在腳本中檢索它。

編輯:又見RAW POST using cURL in PHP

+0

啊我的網址是正確的,因爲我已經得到了到它發送一個101繼續點。當我通過瀏覽器訪問網址時,它可以正常工作。我正在嘗試將內容類型設置爲application/json。 – floor 2014-10-17 04:54:47

+0

可能有助於在接收端發佈代碼。如果腳本實際上在那裏,那麼你必須明確告訴它在你的代碼中發送一個404的地方。 – miken32 2014-10-17 04:57:50

+0

對不起,跳過您設置MIME類型的位置。在Content-Type之後丟失冒號;你可以從日誌中看到,mime類型被設置爲application/x-www-form-urlencoded。 – miken32 2014-10-17 05:01:49

相關問題