使用php 5.5.13和curl 7.36.0测试我的应用程序,我成功完成了这个请求:
public static function httpPut($url)
{
$query = self::concatUrl($_POST);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . self::getCookiesPath());
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . self::getCookiesPath());
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 400);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("ipAddress: " . $_SERVER['REMOTE_ADDR']));
$output = curl_exec($ch);
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200 && curl_getinfo($ch, CURLINFO_HTTP_CODE) != 201)
{
throw new Exception($output, curl_getinfo($ch, CURLINFO_HTTP_CODE));
}
curl_close($ch);
return json_decode($output);
}
但是在服务器上,使用php 5.3.3和curl 7.21.0,我遇到了一个问题:
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
它根本不发送请求中的任何数据。 为了获得成功,我需要使用$ url:
连接$ querycurl_setopt($ch,CURLOPT_URL, $url . " ? " . $query);
知道怎么解决吗?
答案 0 :(得分:0)
通过
curl_setopt($ch,CURLOPT_URL, $url . " ? " . $query);
你只是发出GET请求而不是POST请求。
我不确定self::concatUrl
正在做什么,但您确定它为POST请求创建了有效的键值对吗?
然后您没有指定数据的长度。
请看一下这个答案: PHP curl resets content-length if CURLOPT_POST is set with curl_setopt_array?