繁体   English   中英

从cmd卷曲到php

[英]curl from cmd to php

我是curl的新手,我尝试转换此命令:

curl -k -v -u "user:password" -X POST
-d'{"username":"testuser","password":"testpassword"}' -H 'Content-Type:application/json'
url 

从cmd到php,我这样做:

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/json"));  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("username"=>"testuser","password"=>"testpassword"));
curl_setopt($ch, CURLOPT_URL, "url");
$x=  curl_exec($ch);
echo $x;
var_dump($x);
curl_close($ch);

但是Web服务什么也不返回(应该返回json),这是怎么回事? PD:我尝试连接到Fortiauthenticator,对不起,我的英语不好


更新

嗨,大家好,感谢MonkeyZeus和最后的帮助,这是正确的代码

$ch = curl_init();
    $json = json_encode(array("username"=>"testuser2","password"=>"testpassword"));//name and pass of user to create
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_USERPWD, "user:pass");//name and pass of webservices
    curl_setopt($ch, CURLOPT_NOBODY, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/json"));  
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_URL, "https://ip_fortiauthenticator/api/version/localusers/");
    $x = curl_exec($ch);
    echo $x;
    var_dump($x);
    echo curl_error($ch);
    curl_close($ch);

我希望与FortiAuthenticator战斗的人可以帮助此代码,该代码适用于FA版本3

当您使用数组设置CURLOPT_POSTFIELDS选项时,CURL会将"Content-Type"标头强制为"multipart/form-data" 但是您需要将POST数据作为JSON传递。 因此,您必须将CURLOPT_POSTFIELDS选项设置为JSON编码的字符串。 像这样:

$json = json_encode(array("username"=>"testuser","password"=>"testpassword"));
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/json"));  
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_URL, "$url");
$x = curl_exec($ch);
echo $x;
var_dump($x);
curl_close($ch);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM