PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Curl x-post ei taha toimida
Postitaja: hopsti7 2018-03-23 20:07:13
Otsinud ja guugeldanud et seda nägu, ja bash töötab aga php variant mitte. curl.haxx.se/docs/httpscripting.html x-post kohta loen järgmist:


It should be noted that curl selects which methods to use on its own depending on what action to ask for. -d will do POST, -I will do HEAD and so on. If you use the --request / -X option you can change the method keyword curl selects, but you will not modify curl's behavior. This means that if you for example use -d "data" to do a POST, you can modify the method to a PROPFIND with -X and curl will still think it sends a POST. You can change the normal GET to a POST method by simply adding -X POST in a command line like:
curl -X POST http://example.org/
... but curl will still think and act as if it sent a GET so it won't send any request body etc.


Polegi ju muud kui curl_setopt($curl_objekt, CURLOPT_CUSTOMREQUEST, "PUT"); ja asi tahe, aga ei.


<?PHP
$sisu[] = "a1";
$sisu[] = "a2";
$sisu[] = "111.222.333.444";
$sisu[] = "555.666.777.888";
$aadress = "https://api.hopsti.ee";
$json_rada = array("pesa" => $sisu);

$curl_objekt = curl_init();
curl_setopt($curl_objekt, CURLOPT_URL, $aadress);
curl_setopt($curl_objekt, CURLOPT_POSTFIELDS, $json_rada);
curl_setopt($curl_objekt, CURLOPT_HTTPHEADER,array('Content-Type:application/json'));
curl_setopt($curl_objekt, CURLOPT_USERPWD,'kasutajanimi:api_voti');
curl_setopt($curl_objekt, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
//curl_setopt($curl_objekt, CURLOPT_POST, 1);
curl_setopt($curl_objekt, CURLOPT_CUSTOMREQUEST, "PUT");
//curl_setopt($curl_objekt, CURLOPT_PUT, 1);
curl_setopt($curl_objekt, CURLOPT_RETURNTRANSFER, true);
$vastus = curl_exec($curl_objekt);
curl_close($curl_objekt);
echo $vastus;

?>



#!/bin/bash
curl -X PUT https://api.hopsti.ee -u kasutajanimi:api_voti -H 'Content-Type: application/json' -d '{"pesa": ["a1", "a2", "111.222.333.444","555.666.777.888"]}'
RE: Curl x-post ei taha toimida
Postitaja: indrekp 2018-03-26 10:53:17
Ehk oleks abiks kui sa oma payloadi tegelikult ka json stringiks teeksid?
RE: Curl x-post ei taha toimida
Postitaja: Arvi v 2018-03-26 11:04:46
Kasutage teeke, näiteks unirest http://unirest.io/php.html või guzzle http://docs.guzzlephp.org/en/stable/
RE: Curl x-post ei taha toimida
Postitaja: blaa 2018-03-26 12:34:06
Arvan ka, et pigem on seal kas payloadiga probleem või mõni flag ei ole õige. Proovi PUT puhul fail ette anda, nagu manuaalis. Võibolla toimib.
Sellise asja jaoks väliste teekide kasutamine on selge overkill. Hakkad sõltuma asjadest, mis nagunii native funktsioone kasutavad.
Kui bash toimib ja vaja on ikka läbi php skripti saada, siis võib ka selle sama bash rea php skriptis käima tõmmata (exec(), system(), passthru(), ´ ´).
Kuidas probleem täpsemalt avaldub? Kas curl_error() ka midagi näitab?
RE: Curl x-post ei taha toimida
Postitaja: hopsti7 2018-03-26 22:24:37
Ja töötab!

PHP kood:
 
curl_setopt
($curlCURLOPT_POSTFIELDSjson_encode($json_rada));
RE: Curl x-post ei taha toimida
Postitaja: hopsti7 2018-03-27 11:51:23
Olne ise hädas olnud ja loodetavasti on sellest kellegile kunagi abi. Tegemist zone.ee API'ga et andmebaasile ip põhiseid õigused määrata.
Määramisel tuleb lisada kõik korraga, appendida ei lase.

PHP kood:
 
<?PHP
function LISA_IP($uus_ip){
  
$sisu[] = "ws"
  
$sisu[] = "pma"
  
$sisu[] = "123.456.789.100"
  
$sisu[] = "123.456.789.101"
  
$sisu[] = "123.456.789.102"
  
$sisu[] = "123.456.789.103"
  
$sisu[] = $uus_ip;
  
$json_rada = array();
  
$json_rada = array("identificator" => "andmebaasi_kasutaja_nimi","username" => "andmebaasi_kasutaja_nimi","hosts" => $sisu);

  
$ch curl_init();
  
curl_setopt($chCURLOPT_URL"https://api.zone.eu/v2/vserver/koduleht.ee/database/mysql/account/kasutaja_nimi");
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);
  
curl_setopt($chCURLOPT_POSTFIELDSjson_encode($json_rada));
  
curl_setopt($chCURLOPT_CUSTOMREQUEST"PUT");
  
curl_setopt($chCURLOPT_USERPWD"adminkonto_kasutaja_nimi" ":" "api_voti");
  
$headers = array();
  
$headers[] = "Content-Type: application/json";
  
curl_setopt($chCURLOPT_HTTPHEADER$headers);
  
$result curl_exec($ch);
  
curl_close ($ch);
  
  if (
curl_errno($ch)) {
    echo 
'Error:' curl_error($ch); 
  }
    
  
$json json_decode($resulttrue);
    
$vastus false;
  
  foreach (
$json as $key => $value) {
    foreach (
$value as $key2 => $value2) {
      if(
$key2 =='hosts'){
        foreach (
$value2 as $key3 => $ip_aadressid) {
          if(
rtrim(ltrim($ip_aadressid)) == $uus_ip){
            
$vastus true;
          }
        }
      }
    }    
  }
  
  return 
$vastus;
  }
?>

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.424706935883