2015-09-25 144 views
1

我想知道如何使用curl在php中將數據發佈到名爲Oanda的網站。該說的調用應該是這個樣子:curl -i -H "X-Accept-Datetime-Format: UNIX" "https://api-fxpractice.oanda.com/v1/candles?instrument=EUR_USD&start=137849394&count=1"在PHP中使用curl將頭部和URL發佈到網站?

我寫了這個代碼,試圖做到這一點在PHP肚裏如下:

<?php 
$ch = curl_init(); 
$url = "http://api-sandbox.oanda.com/v1/prices?instruments=EUR_USD&side=buy"; 
$head = " X-Accept-Datetime-Format: UNIX"; 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, true); // header will be at output 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $head); // HTTP request is 'HEAD' 
$content = curl_exec ($ch); 
echo "<p>" . $content . "</p>"; 
curl_close ($ch); 
?> 

當我運行這個無頭正常工作但與頭我得到這個錯誤:HTTP/1.1 400 Bad Request Server: openresty/1.7.0.1 Date: Fri, 25 Sep 2015 17:18:56 GMT Content-Type: application/json Content-Length: 137 Connection: close ETag: "53f4b7f5-89" { "code" : 400, "message" : "Bad Request", "moreInfo" : "http:\/\/developer.oanda.com\/docs\/v1\/troubleshooting\/#errors" }

是他們在我的代碼是錯的,或者是我的代碼好,但我在我的頭中使用錯誤的電話。如果我的代碼錯了,你能否給我提供示例代碼,或者給我一個可以學習如何解決它的方法?另外他們是我想要製作的服務器的另一個請求。該網站說,使它是這樣的:$curl -X POST -d "instrument=EUR_USD&units=1000&side=buy&type=market" https://api-fxpractice.oanda.com/v1/accounts/6531071/orders

我不知道什麼-X的手段和如何將其轉換爲PHP代碼。示例代碼或指導教程如何工作會很好。感謝您的時間和幫助!

回答

1

首先,您需要從$head變量的值中刪除前導空格。所以:

$head = 'X-Accept-Datetime-Format: UNIX'; 

接下來,發送自定義頁眉,你應該說:

curl_setopt($ch, CURLOPT_HTTPHEADER, array($head)); 

當你在做curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $head);,這是告訴服務器您的請求類型(通常應該是這樣的GETPOST)爲X-Accept-Datetime-Format: UNIX,很明顯對HTTP/HTTPS請求類型沒有意義。

現在針對第二個問題,-X POST被用作命令行標誌來指定HTTP請求類型爲POST。因此,要複製此信息,您可以編寫:curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');)但是,如果您未指定參數CURLOPT_CUSTOMREQUEST,那麼默認情況下,如果您在請求正文中上載數據,PHP的curl會自動將請求類型設置爲POST;是不必要的。)同時發送POST請求,您需要在請求頭中包含內容長度和內容類型。

對於捲曲更多關於HTTP POST請求,看看這個鏈接: http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl

爲了搞清楚什麼一些命令行選項意味着OANDA在他們的例子使用的,檢查出捲曲手冊頁: http://curl.haxx.se/docs/manpage.html

欲瞭解更多關於PHP的實現捲曲的,你應該閱讀過的文檔: http://www.php.net/manual/en/function.curl-setopt.php