PHP json API客户端调用

PHP json API客户端调用,php,json,curl,Php,Json,Curl,我需要一些帮助将下面的shell脚本调用转换为PHP 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 --dat

我需要一些帮助将下面的shell脚本调用转换为PHP

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/login呈现登录表单,使用上述cookie的后续JSON请求似乎失败,并显示错误消息“需要在尝试这些请求之前登录”。但是,上面的两个shell命令可以完美地工作

我的想法正确吗?数据参数变成了后变量。JSON数据是一个名为“JSON”的post字段,其中包含由
JSON\u encode()

返回的内容。您可以尝试以下方法:(我重写了一些代码,未经测试)


成功了。假设我在后续API调用中使用相同的cookie。
$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;