PHP curl POST-запрос с ответом JSON

1

Я пытаюсь отправить данные сообщения и получить SID из api (qbittorrent), чтобы отправить запрос на получение позже. Я сейчас застрял с ответом OK, но json - NULL. Вот мой код:

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

Мне удалось заставить json использовать powershell так же просто, как:

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

но я не могу сделать это с помощью php! Если вы также чувствуете, что направляете меня правильно, чтобы получить запрос с использованием SID в качестве файла cookie, я буду более чем приветствуем :)

  • 0
    $ postvars будет иметь дополнительный «&» в конце. Это проблема? ( 'Имя пользователя = администратора и пароль = мойпароль &'). Также вам нужен цикл для конкатенации строки или вы можете просто отправить массив - curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ fields);
  • 0
    $postvars = rtrim($postvars, '&'); скорее всего, здесь необходимо удалить конечный амперсанд.
Показать ещё 4 комментария
Теги:
curl
post
get

1 ответ

0

Проблема лежала там, изменилась:

curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);

в

curl_setopt($ch, CURLOPT_HEADER, true);

И я получил ответ от json!

  • 0
    но вы отправили неверный запрос, тем не менее. сделать обе строки.
  • 0
    Молодцы, понимая это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню