2011-12-30 120 views
0

我需要一些帮助翻译以下shell脚本调用到PHPPHP JSON API客户端调用

curl -3 --cookie /tmp/cookie --cookie-jar /tmp/cookie --insecure --data "login=login" --data "username=admin" --data "password=password" URL-HERE/login 

curl -3 --cookie /tmp/cookie --cookie-jar /tmp/cookie --insecure --data "json={'cmd':'get-data', 'id':'1'}" URL-HERE/api 

我在与第一curl命令一些困难。

得到尽可能:

$curl=curl_init(); 
    curl_setopt($curl,CURLOPT_RETURNTRANSFER ,1); 
    curl_setopt($curl,CURLOPT_HEADER , 1); 
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE); 

    curl_setopt($curl,CURLOPT_COOKIEJAR, "/tmp/cookie"); 
    curl_setopt($curl,CURLOPT_COOKIEFILE, "/tmp/cookie"); 
    curl_setopt($curl,CURLOPT_TIMEOUT,10000); 
    curl_setopt($curl,CURLOPT_URL,"URL-HERE/login"); 

    curl_setopt($curl,CURLOPT_POST ,1); 
    $post = array(
     "username" => 'admin', 
     "password" => 'password', 
     "login" => 'login', 
    ); 
    curl_setopt($curl,CURLOPT_POSTFIELDS,$post); 
    echo curl_exec($curl); 

这似乎总是呈现从URL HERE /登录的登录表单,并使用上述cookie的后续JSON请求似乎失败,错误消息“需要是在尝试这些请求之前登录“。但是,上面的两个shell命令完美无缺地工作。

我正确的想法 - 数据参数变成后变量。而JSON数据是一个名为“json”的帖子字段,其内容已由json_encode()返回?

回答

0

你可以试试这个:(我改写了我的一些代码,未测试)

$url = 'URL-HERE/login'; 
$username = 'username'; 
$password = 'password'; 
$postfields = "login=login&username=$username&password=$password"; 

$cookie="/tmp/cookie"; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postfields); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 

curl_close($ch); 
echo $result; 
+0

这工作。只要我使用相同的cookie进行后续的API调用。 – cell0 2011-12-30 14:11:57