2015-09-11 142 views
2

我需要做一個PUT請求發送JSON數據,我寫了下面的代碼,但數據不發送。有人可以幫忙嗎?PHP CURL PUT請求與數據

$url = 'https://example.com'; 
$data='{"example":"valor"}'; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_PUT, 1); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
$result = curl_exec($curl);  
print_r($result); 

感謝

+0

你得到了什麼錯誤。 – StillLearnin

+0

我有同樣的問題。請求被髮送,但目標服務器沒有得到它的正文。你有沒有找到任何建議? –

+0

@EvgeniyTimchenko我不記得究竟解決了我的問題,但我給自己定像(CURLOPT_COOKIEJAR,CURLOPT_COOKIEFILE,CURLOPT_COOKIESESSION,CURLOPT_SSL_VERIFYPEER,CURLOPT_AUTOREFERER,CURLOPT_USERAGENT,CURLOPT_POSTFIELDS和CURLOPT_HTTPHEADER) –

回答

1

我想我知道您的問題。嘗試添加

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

PHP的文檔暗示,如果你不這樣做,直接執行卷曲只會把內容輸出到一個頁面,如果你使用這個作爲那並不是一個腳本t輸出任何東西,顯然不會顯示任何東西。這應該使$result相等的東西,然後讓你print_r

參考:http://php.net/manual/en/function.curl-setopt.php

+0

它已經在我的代碼,一些更多的選擇,如果你有任何想法? –

+0

@LucianoMarqueto我看到'curl_setopt($ curl,CURLOPT_RETURNTRANSFER,1);',但是爲了排除故障,嘗試用'true'替換你的'1'。你有沒有從網頁上看到任何錯誤? – UnstableEagle

+0

好吧,我試圖從「1」改爲「真」,但沒有效果。 –

0

我會建議你使用Guzzle。它是一個圍繞CURL的包裝,它將所有配置抽象化併爲您提供了許多方便使用的便捷方法。

你可以按照下面的鏈接指令安裝狂飲: http://guzzle.readthedocs.org/en/latest/overview.html#installation

下面是如何,您可以使用狂飲得到你想要的東西的例子。

require 'vendor/autoload.php';  
    use GuzzleHttp\Client; 

    $url = 'https://example.com'; 
    $data= array("example" => "valor"); 

    $client = new Client(); 
    $response = $client->request('PUT', $url, [ 
     'json' => $data 
    ]); 

    print_r($response); 

我在許多項目中使用了Guzzle代替原始CURL,並發現它是一個很棒的節省時間。

0

我有同樣的問題。我已經改變

curl_setopt($curl, CURLOPT_URL, $url); 

解決了

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); 

,在此之前,嫋嫋嘗試發佈一個文件或類似的東西,與100繼續,但我們需要張貼JSON。