PHP CURL POST ohne einzelne Parameter

Wolly300

Lt. Junior Grade
Registriert
Mai 2014
Beiträge
507
Hallo zusammen,

ich habe das Porblem, das ich einen Curl post ausführen muss, aber das bis jetzt noch nicht ganz so umgesetzt bekommen habe.

[linux]$ curl -H "X-MBX-APIKEY: vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A" -X POST 'https://api.binance.com/api/v3/order?symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1499827319559&signature=c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71'


Das ist das Vorgabe Beispiel aus Linux.

ich kann ja wie im Beispiel mit :

PHP:
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

den Header festlegen.

Jetzt möchte/muss ich aber den kompletten String/Link posten.
Am Anfang wollte ich das mit:

PHP:
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS,$params);

machen.

in $url wäre dann "https://api.binance.com/api/v3/order?" gewäsen und in $params "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1499827319559&signature=c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71"

Das hat aber leider nicht geklappt, da spuckt mir die Webseite geleich einen Fehler aus. Wie kann ich den Link denn komplett posten ?


Danke für eure Hilfe.
 
http://php.net/manual/de/function.curl-setopt.php STRG+F POSTFIELDS: Versuch es doch mal als Array (["symbol"=>"LTCBTC", …]).
Außerdem ist das ? nicht nötig.

STRG+F HTTPHEADER: Das sollte ein Array sein, kein String.

Tipp: error_reporting=E_ALL|~E_DEPRECATED.

EDIT: Habs mal ausprobiert:
Code:
$ch=curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-MBX-APIKEY: vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A"]);
curl_setopt($ch, CURLOPT_URL, "https://api.binance.com/api/v3/order");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&rec vWindow=5000&timestamp=1499827319559&signature=c8db56825ae71d6d79447849e617115f4 a920fa2acdcab2b053c4b2838bd6b71");
curl_exec($ch);
curl_close($ch);
Antwort:
Code:
{"code":-2015,"msg":"Invalid API-key, IP, or permissions for action."}
 
Zuletzt bearbeitet:
wie genau baut man/ich den array in das postfields rein ?
 
Indem du ein Array übergibts.
Code:
<?php
$ch=curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-MBX-APIKEY: vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A"]);
curl_setopt($ch, CURLOPT_URL, "https://api.binance.com/api/v3/order");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ["symbol"=>"LTCBTC","side"=>"BUY","type"=>"LIMIT","timeInForce"=>"GTC","quantity"=>"1","price"=>"0.1","recvWindow"=>"5000","timestamp"=>"1499827319559","signature"=>"c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71"]);
curl_exec($ch);
curl_close($ch);
?>
Hab noch ein paar Copy-Paste Fehler korrigiert:
{"code":-1101,"msg":"Duplicate values for a parameter detected."}
Ganz am Ende der PHP-Doku steht noch was über POSTFIELDS:
Ein für CURLOPT_POST übergebenes Array wird als multipart/form-data, ein URL-kodierter String als application/x-www-form-urlencoded kodiert.
Also ist das Array für dich wahrscheinlich die falsche Variante.
 
Zuletzt bearbeitet:
das bedeutet genau ?

in meinem Code ist es jetzt so :

PHP:
$params = [
            "symbol" => $symbol,
            "side" => $side,
            "type" => $type,
            "quantity" => $quantity,
            "price" => $price,
            "recvWindow" => 5000,
            "timeInForce" => 'GTC',
            "signature" => '*'}

$header = "User-Agent: Mozilla/4.0 (compatible; PHP Binance API)\r\nX-MBX-APIKEY: {$this->api_key}\r\n content-type: application/x-www-form-urlencoded\r\n";


    private function test ($url, $header, $params = []) 
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$params);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $content = curl_exec($ch);
        curl_close($ch);
        return $content;
    }

$url = "https://api.binance.com/api/v3/order"

Also wenn ich jetzt so den Array übergebe bekomme ich diese Fehlermeldung :

Array (
Code:
 => -1102 [msg] => Mandatory parameter 'symbol' was not sent, was empty/null, or malformed. )

Aber im Array steht etwas: 

symbol=NEOBTC&side=SELL&type=LIMIT&quantity=1&price=1&recvWindow=5000&timeInForce=GTC×tamp=1526417555630&signature=****
 
Zuletzt bearbeitet:
$header sollte ein Array sein, kein String mit mehreren Parametern. Du sendest ein Content-Type (mit Leerzeichen vorne dran, was auch nicht korrekt ist) mit x-form-urlencoded und sendest leider (siehe EDIT von mir) als multipart/form-data. Klar, dass das nicht geht.

Das mit dem Array für POSTFIELDS ist Kommando-zurück.

Ich empfehle mal https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol zu lesen, damit du verstehst, was du eigentlich machst. Und natürlich die Doku von curl auch.
 
sry ist eigentlich ein array bei mir nur falsch hier reingeschrieben
 

Ähnliche Themen

Antworten
19
Aufrufe
3.722
Zurück
Oben