2016-02-27 152 views
1

我试图发送post数据并从api(qtortorrent)接收SID以便稍后使用get请求发送。我目前坚持一个OK响应,但json是NULL。这里是我的代码:带有JSON响应的PHP curl POST请求

<?php 
    $ch = curl_init(); 
    $fields = array('username'=>'Admin','password'=>'mypassword'); 
    $postvars = ''; 
    foreach($fields as $key=>$value) { 
    $postvars .= $key . "=" . $value . "&"; 
    } 
    $postvars = rtrim($postvars, '&'); 
    $url = "https://192.123.123.123:8080/login"; 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_POST, 1);   
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, 0); 
    $headers= array('Accept: application/json','application/x-www-form-urlencoded'); 
    curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3); 
    curl_setopt($ch,CURLOPT_TIMEOUT, 20); 
    $response = curl_exec($ch); 
    var_dump(json_decode($response, true)); 
    print "curl response is:" . $response; 
    curl_close ($ch); 
?> 

你可以看到这里的API载文https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-Documentation#authorization

我可以使用PowerShell作为根本,以获得JSON:

$prms = @{username="Admin";password="mypassword"} 
$res = Invoke-WebRequest https://192.123.123.123:8080/login -Method POST -Body prms -UseBasicParsing 

但我不能这样做所以用PHP!如果你还觉得我的标题权使用SID作为cookie GET请求,我会比欢迎:)

+0

$ postvars在结尾将会有一个额外的“&”。这是一个问题吗? ( '用户名=管理员和密码=输入mypassword&')。另外,你是否需要循环来连接字符串,或者你可以发送数组 - curl_setopt($ ch,CURLOPT_POSTFIELDS,$ fields); –

+0

'$ postvars = RTRIM($ postvars,“&');'很可能在这里需要删除尾随符号。 – Ohgodwhy

+0

编辑我的问题,仍然得到同样的结果。服务器仍然回答‘确定’,我曾与一个错误的密码尝试我得到“失败” – Gab

回答

0

问题躺在那里更多,改:

curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 

curl_setopt($ch, CURLOPT_HEADER, true); 

我得到了我的JSON响应!

+0

,但你仍然发出错误的请求。做两条线。 – hanshenrik

+0

干得好! –