2015-09-25 140 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