使用curl在php中发布一个标题和URL到一个网站


using curl in php to post a head and URL to a website?

我想知道如何在php中使用curl将数据发布到一个名为Oanda的网站。call应该看起来像这样:curl -i -H "X-Accept-Datetime-Format: UNIX" "https://api-fxpractice.oanda.com/v1/candles?instrument=EUR_USD&start=137849394&count=1"

我写了这段代码,试图在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" }

是他们的东西在我的代码是错误的,或者是我的代码很好,但我在我的头使用错误的调用。如果我的代码是错误的,你能提供我的样本代码或给一个ling在哪里可以学习如何修复它?他们的另一个请求,他们的服务器,我想做的。网站说要这样做:$curl -X POST -d "instrument=EUR_USD&units=1000&side=buy&type=market" https://api-fxpractice.oanda.com/v1/accounts/6531071/orders

我不知道-X是什么意思以及如何将其转换为php代码。提供示例代码或教程的链接就更好了。感谢您的时间和帮助!

首先,您需要从$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请求类型是POSTcurl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); (然而,如果你没有指定一个CURLOPT_CUSTOMREQUEST参数,那么,默认情况下,PHP的curl会自动设置请求类型为POST,如果你在请求体中上传数据;)同样要发送POST请求,您需要在请求头中包含内容长度和内容类型。

关于curl中HTTP POST请求的更多信息,请查看此链接:http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl

要弄清楚Oanda在他们的示例中使用的一些命令行选项的含义,请查看curl手册页:http://curl.haxx.se/docs/manpage.html

更多关于PHP的cURL实现,你应该阅读下面的文档:http://www.php.net/manual/en/function.curl-setopt.php