PHP curl POST请求与JSON响应

我正在尝试发送帖子数据并从api(qbittorrent)接收SID以通过get请求发送 后来。 我目前坚持OK响应,但json为NULL。 这是我的代码:</ p>

 &lt;?php 
$ ch = curl_init();
$ fields = array('username'=&gt;'Admin','password '=&gt;'mypassword');
$ postvars ='';
foreach($ fields as $ key =&gt; $ value){
$ postvars。= $ key。 “=”。 $ value。 “&amp;”;
}
$ postvars = rtrim($ postvars,'&amp;');
$ 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));
打印“卷曲响应是:”。 $ response;
curl_close($ ch);
?&gt;
</ code> </ pre>

您可以在此处查看API文档 https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-Documentation#authorization </ p>

我能够像使用PowerShell一样使用powershell:</ p>

  $ prms = @ {username =“Admin”; password =“  mypassword“} 
$ res = Invoke-WebRequest https://192.123.123.123:8080/login -Method POST -Body prms -UseBasicParsing
</ code> </ pre>

但是我 我无法用PHP这样做! 如果你也想让我使用SID作为cookie来获取请求,我将非常欢迎:)</ p>
</ div>

展开原文

原文

I'm trying to send post data and receive an SID from an api(qbittorrent) to send with a get request later. I'm currently stuck with an OK response but the json is NULL. Here's my code:

<?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);
?>

You can see the API documentaiton here https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-Documentation#authorization

I was able to get the json using powershell as simply as :

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

but I'm unable to do so with php! If you also feel like heading me right for the get request using the SID as a cookie, i'll be more than welcome :)

duanna1407
duanna1407 $response是“好的”。和json错误显然是“语法错误”,我无法从中获得json响应,我可以使用powershell。我很无能为力。
4 年多之前 回复
doumi7861
doumi7861 在json_decode期间可能存在问题。doechojson_last_error_msg();看看是什么阻止它从字符串返回JSON对象。还回应$response;在解码之前查看字符串是什么。
4 年多之前 回复
dr637349
dr637349 我真的不知道需要发送什么,我假设一个字符串,但我不认为问题是初始请求,因为我得到一个OK响应,但更多关于返回的数据:\
4 年多之前 回复
doudang9147
doudang9147 编辑我的问题,仍然得到相同的结果。服务器仍然回答“确定”,我尝试使用错误的密码,我得到“失败”
4 年多之前 回复
douyi8732
douyi8732 $postvars=rtrim($postvars,'&');这里可能需要删除尾随的&符号。
4 年多之前 回复
dongli7236
dongli7236 $postvars最后将有一个额外的“&”。这是一个问题吗?('用户名=管理员和密码=输入mypassword&')。此外,你是否需要循环来连接字符串或者你只需​​要发送数组-curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
4 年多之前 回复

1个回答



问题出在那里,改变了:</ p>

  curl_setopt($ ch,CURLOPT_HTTPHEADER  ,$ header); 
</ code> </ pre>

到</ p>

  curl_setopt($ ch,CURLOPT_HEADER,true); 
< / code> </ pre>

我得到了我的json回复!</ p>
</ div>

展开原文

原文

The problem was lying there, changed:

curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);

to

curl_setopt($ch, CURLOPT_HEADER, true);

And I got my json response!

dongsong4418
dongsong4418 干得好搞清楚!
4 年多之前 回复
dongrong5189
dongrong5189 但是你发送了错误的请求。 做两条线。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐